我找到了一个示例任务,可以在您单击文档中的任何位置时在页面上显示警报。在任务中,您需要仅编辑具有两个参数的display()函数-MyFunc和MyOBJ,以便显示个人对象的名称。我想出了这样的内容,但是警报只有在页面刷新之后才出现,而不是在每次点击文档之后出现。
function start() {
var person = {
name : "John"
};
function alertName() {
alert(""+this.name.toUpperCase() + "");
}
document.addEventListener('click', display(alertName, person));
}
function display(myFunc, myObj) {
name = myObj.name;
myFunc();
}
start();
这是小提琴:
function start() {
var person = {
name : "John"
};
function alertName() {
alert(""+this.name.toUpperCase() + "");
}
document.addEventListener('click', start(alertName, person));
}
function display(myFunc, myObj) {
name = myObj.name;
myFunc();
}
start();
body {
background-color:yellow;
}
<body>
</body>
此处的问题在该addeventListener第二参数需要是事件触发时要调用的函数。
在您的范围内,您通过了指令而不是功能。您可以做的是在功能主体中添加display()调用,然后将功能传递为第二个参数:
function start() {
var person = {
name : "John"
};
function alertName() {
alert(""+this.name.toUpperCase() + "");
}
document.addEventListener('click', function() {
display(alertName, person)
});
}
function display(myFunc, myObj) {
name = myObj.name;
myFunc();
}
start();
您需要了解display
是一个函数,并且通过display(alertName, person)
您立即调用它,而不是事件回调。但是,addEventListener
需要函数参考作为第二个参数,因此,这意味着当称为display(alertName, person)
时,必须返回一个新功能,该功能将从内部调用alertName
(这是参考)。
最后,this.name
内部alertName
表示需要在myObj
的上下文中调用它。
function start() {
var person = {
name: "John"
}
function alertName() {
alert("" + this.name.toUpperCase() + "");
}
document.addEventListener('click', display(alertName, person));
}
function display(myFunc, myObj) {
return function () {
myFunc.call(myObj)
}
}
start();
Click somewhere.