为什么这段代码会抛出undefined
?
function Obj() {
this.a = 12;
this.b = "a";
this.privilegedMethod = function () {
this.a++;
privateMethod();
};
function privateMethod() {
this.b = "foo";
console.log(this.b);
}
}
调用下面的函数,在"严格模式"中抛出...未定义。
var a = new Obj();
console.log(a.privilegedMethod());
答案 0 :(得分:5)
JavaScript中this
的值是根据函数的调用方式设置的。它是" context"。
当您a.privilegedMethod()
时,您正在"上下文中呼叫privilegedMethod()
" a
。在内部,该方法this
将为a
。
当您致电privateMethod()
时,没有"上下文"。在严格模式之外,this
将为window
,但在严格模式下,undefined
。
试试这个:privateMethod.call(this);
。
答案 1 :(得分:1)
因为privateMethod不是一个方法,它只是构造函数范围内的一个函数,所以this.b = "foo";
没有指向你的实例,所以它正在寻找window.b
。在严格模式下标记未定义。