«это» не определено внутри объекта в JavaScript, доступ к свойству объекта с помощью другого свойства - PullRequest
3 голосов
/ 19 мая 2011
Type= {
        Container: $get('ctl00_Main_rbtnlst_Type'),
        Local: this.Container.getElementsByTagName('input'),
        Foreign:this.Container.getElementsByTagName('input')
    }

когда я пробежал этот код в консоли firebug, я получаю сообщение об ошибке this.Container, хотя оно и определено, не определено. Как еще я могу получить доступ к свойству Container внутри свойства Local и Foreign. Я даже попробовал это.

Type= {
        Container: $get('ctl00_Main_rbtnlst_Type'),
        Local: Container.getElementsByTagName('input'),
        Foreign:Container.getElementsByTagName('input')
    }

Ответы [ 2 ]

3 голосов
/ 19 мая 2011

Вы не можете получить this при создании экземпляра. Вы можете сделать:

Type= {
        Container: $get('ctl00_Main_rbtnlst_Type'),
        Local: function(){return this.Container.getElementsByTagName('input');},
        Foreign: function(){return this.Container.getElementsByTagName('input');}
    }

И позже получить местный или иностранный, используя Type.Local()/Type.Foreign()

или используйте этот избыточный шаблон, если вам нужен локальный / внешний в экземпляре:

Type= {
            Container: $get('ctl00_Main_rbtnlst_Type'),
            Local: $get('ctl00_Main_rbtnlst_Type')
                     .getElementsByTagName('input');},
            Foreign: $get('ctl00_Main_rbtnlst_Type')
                      .getElementsByTagName('input');}
        }

Или используйте эту немедленно выполненную функцию:

var Type = (function(){
   var container = $get('ctl00_Main_rbtnlst_Type'),
       local = container.getElementsByTagName('input'),
       foreign = container.getElementsByTagName('input');
   return {
           Container: container,
           Local: local,
           Foreign: foreign
          }
})();

и, чтобы быть полным, вы также можете использовать несколько getters, но это не будет работать во всех браузерах (особенно не в IE <9) </p>

var Type = {
    Container: $get('ctl00_Main_rbtnlst_Type'),
    get Local() {return this.Container.getElementsByTagName('input');},
    get Foreign() {return this.Container.getElementsByTagName('input');}
}

примечание : Local и Foreign одинаковы, это то, что вы хотели?

2 голосов
/ 19 мая 2011

Вы можете сделать это:

var container = $get('ctl00_Main_rbtnlst_Type');
Type = {
    Container: container,
    Local: container.getElementsByTagName('input'),
    Foreign: container.getElementsByTagName('input')
}

Но что вы, вероятно, хотите, это:

function Type(containerId){
    var container = $get(containerId);
    return {
        Container: container,
        Local: container.getElementsByTagName('input'),
        Foreign: container.getElementsByTagName('input')
    }
}

var obj = Type('ctl00_Main_rbtnlst_Type');
// can now use obj.Container, obj.Local and obj.Foreign
...