2016-11-18 168 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像您期望的不綁定,並可能綁定到全局對象。