NODEJS中的Javascript函数对象call()

时间:2015-03-10 08:20:45

标签: javascript node.js

我已经阅读了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

2 个答案:

答案 0 :(得分:2)

原因可能是在这种情况下,this的范围不同。出现这种情况有几个原因:

  • 您在一个函数(即使是(function() { self invoking function })()
  • 中运行它
  • 您在nodejs中运行此项,而不是在浏览器中,在节点中,在全局范围内,thisundefined而不是浏览器中的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