2016-11-18 145 views
0

下面是JavaScript中令我困惑的一件事:在下面的代码中,我有一个包含一个属性的对象构造函数。在它下面,我添加了一些原型方法。方法'method1'能够很好地访问'this.property',并返回值30.方法'combine'只是调用'method1',但它返回NaN。似乎'this.property'是公开的第一个电话,但不是第二个。为什么这个奇怪的行为js:方法无法访问属性

var ObjBuilder = function() 
{ 
    this.property = 3; 
}; 

ObjBuilder.prototype = function() 
{ 
    var method1 = function() 
    { 
    return this.property * 10; 
    } 
    var combine = function() 
    { 
    return method1() + 2; 
    } 
    return {method1: method1, 
      combine: combine}; 
}(); 

// instantiate an object and call its methods 
var obj = new ObjBuilder(); 
console.log(obj.method1());//prints 30 
console.log(obj.combine());//prints NaN. WHY??? 
+0

如果你在'method1'里面记录'this',然后在'combine'里面调用它,你会看到问题 – Li357

+0

@ t.niese [它看起来不像它](https://jsfiddle.net/3ovc6Lye /) - '窗口'。你必须把它称为'this.method1()'来给出'this'上下文。 – Li357

回答

2

我觉得你的问题是,combine简单地调用method1功能(不this.method1,例如),所以this中的method1该呼叫this.property * 10像您期望的不绑定,并可能绑定到全局对象。