我已经阅读了call()方法并想知道下面的全局输出。不应该是this.name在这种情况下" Michael"。但是显示的输出是未定义的。
---新信息:这是通过NODEJS运行---
function sayNameForAll(label) {
console.log(label + ":" + this.name);
}
var person1 = {
name: "Nicholas"
};
var person2 = {
name: "Greg"
};
var name = "Michael";
sayNameForAll.call(this,"global"); //ouput global:undefined
sayNameForAll.call(person1,"PersonName1"); //PersonName1:Nicholas
sayNameForAll.call(person2,"PersonName2"); //PersonName2:Greg
答案 0 :(得分:2)
原因可能是在这种情况下,this
的范围不同。出现这种情况有几个原因:
(function() { self invoking function })()
)this
为undefined
而不是浏览器中的window
。答案 1 :(得分:0)
此处工作正常(单击“运行代码段”)。
您的代码是否在另一个函数中运行?如果是,那么您声明的变量将不在全局对象上,并且根据您调用函数的方式,this
可能不会引用全局对象。
function sayNameForAll(label) {
console.log(label + ":" + this.name);
}
var person1 = {
name: "Nicholas"
};
var person2 = {
name: "Greg"
};
var name = "Michael";
sayNameForAll.call(this,"global"); //ouput global:undefined
sayNameForAll.call(person1,"PersonName1"); //PersonName1:Nicholas
sayNameForAll.call(person2,"PersonName2"); //PersonName2:Greg