2016-12-25 78 views
1

關於我經常構建JavaScript項目的基本JavaScript對象示例。我正在尋求一些幫助。訪問JavaScript根級對象THIS關鍵字值

在我的TestApp.init()函數中,我將這個函數稱爲this.cache.cacheFuncOne();,這是另一個函數,它在另一個名爲cache的對象內層次更深。

Inside this.cache.cacheFuncOne();我嘗試訪問主對象this.prop1上的屬性,導致未定義。

當我訪問this.prop1從其他嵌套在另一個對象中不是1級更深的函數中訪問this.prop1時,它會按預期方式工作並顯示值。

所以我開始意識到,在cache{}對象中,this關鍵字與根級別對象上的this值不同。

基於這個簡單的演示,我將如何訪問下面的cache{}對象內的根級別this值?

var TestApp = { 
 
    prop1: 'property1', 
 

 
    init: function() { 
 
    this.cache.cacheFuncOne(); 
 
    alert(this.prop1); 
 
    }, 
 

 
    funcOne: function() { 
 

 
    }, 
 

 
    funcTwo: function() { 
 

 
    }, 
 

 
    cache: { 
 

 
    cacheFuncOne: function() { 
 
     alert(this.prop1); 
 
    }, 
 
    } 
 

 
} 
 

 
TestApp.init();

+0

由於它是單例對象,所以使用'TestApp.prop1'。 –

+0

我想你可以使用.bind(this)來獲得父範圍的這個值。 –

回答

2

你所尋找的是無論是call()apply()。他們都是Function的原型的一部分,他們的第一個參數是在該函數內將是this的對象。

所以你的情況,你可以這樣做:

// ... 
init: function() { 
    this.cache.cacheFuncOne.call(this); 
    alert(this.prop1); 
} 
// ... 

另外,如果你使用ES6,你可以只使用arrow function

1

你可以使用ES6/ES2015?如果是的話你可以用箭頭功能

cacheFuncOne:() => { 
    alert(this.prop1); 
}, 

this將參考對象與prop1


另一種選擇是使用bind(this)

cacheFuncOne: function() { 
    alert(this.prop1); 
}.bind(this),