为什么这个代码在"严格模式"中未定义

时间:2014-11-07 23:07:54

标签: javascript

为什么这段代码会抛出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());

2 个答案:

答案 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 。在严格模式下标记未定义。