2016-03-06 33 views
-1

我具有包含號碼和將遞增和打印數的函數對象testObj1。如何讓對象的函數或屬性成爲另一個對象函數的指針?

testObj1 = 
{ 
    testNum: 0, 

    testFunc1: function() 
    { 
     this.testNum++; 
     console.log(this.testNum); 
    } 
} 

而且我也有一個空的功能和其他功能,其參數被分配到空函數對象testObj2。

testObj2 = 
{ 
    testFunc2: function() {}, 

    assignFunc: function(newFunc) 
    { 
     this.testFunc2 = newFunc; 
    } 
} 

現在我嘗試分配testFunc1到testFunc2並運行testFunc2。

testObj2.assignFunc(testObj1.testFunc1); 

testObj2.testFunc2(); // Should output 1 but gives a NaN. 

似乎testFunc2只是testFunc1的副本,並試圖訪問testNum內testObj2其中testNum不存在。我怎樣才能讓testFunc2只是一個指向testFunc1的指針,所以當我調用testFunc2時,它會調用testObj1裏面包含testNum的testFunc1?

回答

0

在這種情況下,'這'是指調用網站(在這種情況下,因爲有其他的選擇)。你的調用網站是testObj2,這意味着'this'會引用它。如果你願意,你可以隨時綁定的第一個對象是這樣的:

testObj2.assignFunc(testObj1.testFunc1.bind(testObj1);

你可能想增加自己的assignFunc取兩個值,功能和 '本' 方面,並使用它像這樣:

testObj2 = 
 
{ 
 
    testFunc2: function() {}, 
 

 
    assignFunc: function(newFunc, altThis) 
 
    { 
 
     altThis = altThis || this; 
 
     this.testFunc2 = newFunc.bind(altThis); 
 
    } 
 
}

通過方式,你可以直接分配給對象而不需要賦值功能。

+0

它的工作原理!非常感謝你! – Nickse

相關問題