Ale*_*ign 5 javascript scope addeventlistener
为了练习我对 Javascript 对象的知识,我编写了一个非常简单的程序:
const male = document.querySelector('.male');
const female = document.querySelector('.female');
/* Person constructor */
function Person (gender) {
this.gender = gender;
}
Person.prototype.bio = function() {
alert('This person is ' + this.gender + '.');
};
/* Create person */
male.addEventListener('click', function() {
let male1 = new Person('male');
return male1;
});
female.addEventListener('click', function() {
let female1 = new person('female');
return female1;
});
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了范围问题:我无法在全局范围内调用male1或female1对象。跑步
male1;
Run Code Online (Sandbox Code Playgroud)
在浏览器控制台中返回以下错误:
ReferenceError: male1 is not defined
Run Code Online (Sandbox Code Playgroud)
如何正确返回新对象male1和female1,以便我可以在全局范围内访问它们?
如果我正确理解您的问题,那么处理与事件处理程序相关的数据/变量时的一般模式是在该事件处理程序的范围之外声明这些变量(即在“全局”范围内,如下所示),而不是从事件处理程序返回该变量:
const male = document.querySelector('.male');
const female = document.querySelector('.female');
// Declare male1,female1 in global scope
let male1;
let female1;
/* Person constructor */
function Person (gender) {
this.gender = gender;
}
Person.prototype.bio = function() {
alert('This person is ' + this.gender + '.');
};
/* Create person */
male.addEventListener('click', function() {
// update global variables like so
male1 = new Person('male');
// return male1;
});
female.addEventListener('click', function() {
// update global variables like so
female1 = new Person('female');
//return female1;
});
// Added this to demonstrate how global variables are updated
// after click events are fired
setInterval(function() {
console.log('male1',male1);
console.log('female1',female1);
}, 1000);Run Code Online (Sandbox Code Playgroud)
<button class="male">Male</button>
<button class="female">Female</button>Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
459 次 |
| 最近记录: |