2013-09-16 109 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 
}