2013-09-16 136 views
1

我有以下腳本從JavaScript對象訪問變量

<script> 

var Obj = { 
     purpose_1: { 
      defaults: { 
       purpose:{ my_variable:"Test" } 
      }, 
      activity: function() { 
       console.log(Obj.purpose_1.defaults.purpose.my_variable); 
      } 
     }, 

     purpose_2: { 

     } 
    } 

    Obj.purpose_1.activity(); 

</script> 

我訪問my_variable和線

console.log(Obj.purpose_1.defaults.purpose.my_variable); 

獲得輸出Test控制檯有沒有像

this.my_variable任何捷徑的方式

訪問my_variable而不是此長路徑

Obj.purpose_1.defaults.purpose.my_variable

致謝。

+0

'this.defaults.purpose.my_variable'就是其中之一 – BlitZ

+0

只要您繼續按照您當前的方式調用函數,'this.defaults.purpose.my_variable'就會工作。 – nnnnnn

回答

3
activity: function() { 
    return function() { 
     //this now refers to Obj.purpose_1.defaults.purpose 
     console.log(this.my_variable); 
    }.call(Obj.purpose_1.defaults.purpose); 
    // call overrides the context in which the function is executed 
} 

返回綁定到你需要的上下文中的功能!這是一個sample fiddle

請參閱MDN中的Function.prototype.call方法。

+0

自己做的沙箱......嗯,好的(:+1但是不要忘了保存對當前上下文的引用:'var self = this'在return function(){...} .call()'會直接給出訪問這兩個對象 – BlitZ

+0

您是否打算將這個答案當作玩笑?(我不確定是否提供嚴肅的反饋) – nnnnnn

+0

哦,太好了,謝謝。還可以使用.call(this.defaults.purpose) ; – Salim

2

因爲JavaScript對象的隱式引用傳遞,你可能會爲自己創建的快捷方式是這樣的:

activity: function() { 
    var p = this.defaults.purpose; // shortcut 

    console.log(p.my_variable); // property 
}