эта сфера для родительского объекта внутри объекта


Это лучший способ, чтобы получить доступ к родительской области при решении сложных литералы объектов?

Я нахожу это немного некрасиво, и, очевидно, лучшим решением будет никогда не быть с участием называя его напрямую, но, сохранив государство в предыдущую область. Я пробовал с помощью bind() , но не заставить его работать правильно.

var object = {
  name : 'foo',
  getName : (function(){
      return function(that){ 
            return {
                a : 111,
                b : that.name,
                c : function(){
                    return this.b;
                }
            }
       }(this);
  })
};

object.getName().b  // 'foo'


15060
2
задан 26 июня 2011 в 11:06 Источник Поделиться
Комментарии
1 ответ

Я понимаю, что вы не просто экспериментировать с замыканиями, потому что ваш код должен быть простым Гэтэр так...

var object = {
  name : 'foo',
  getName : function(){ //closure
return {
a : 111,
b : this.name, // variable th is avaliable in the inner scope
c : function(){
return this.b;
}
}
 }
};

object.getName().b // 'foo'

Это то же самое, что ваш пример:

var object = {
  name : 'foo',
  getName : (function(){ //closure
var th=this; // a new var introduced in a closure
      return function(){
return {
a : 111,
b : th.name, // variable th is avaliable in the inner scope
c : function(){
return this.b;
}
}
}();
 })
};

object.getName().b // 'foo'

[править]

это в JS зависит от того, где функция вызывается, так что если вы хотите хороший инкапсуляции попробуйте это:

var object = {}
(function(){

var _name='foo';

object.getName=function(){
return _name;
}
});

3
ответ дан 26 июня 2011 в 12:06 Источник Поделиться