Аксессоры/мутаторы

Я пытаюсь создать такой объект:

var DadosUtente = true;
var DevolucaoModelo = {
get UtNome() { return (DadosUtente) ? $("#UT_Nome") : $("#Equipamento_Nome")}
};

Если я изменю DadosUtente, селектор также вернет изменения.

Это правильно работает в Chrome, но когда я тестировал его с Internet Explorer, я получаю сообщение об ошибке, потому что браузеры исключают :

В остальной части кода я обращаюсь к селекторам, таким как DevolucaoModelo.UtNome.val();

Кто-нибудь может мне помочь?

Кстати, я много искал в Google и пробовал другие решения, но безуспешно в IE.


person Gui    schedule 15.07.2011    source источник
comment
Это JavaScript? В JavaScript нет ключевого слова get. quackit.com/javascript/javascript_reserved_words.cfm   -  person Sanghyun Lee    schedule 15.07.2011
comment
Геттеры и сеттеры JavaScript не поддерживаются в IE; см.: stackoverflow.com/questions/1077106/   -  person Justin Ethier    schedule 15.07.2011
comment
@Justin О, я не знал о геттерах и сеттерах JavaScript. Спасибо за ссылку.   -  person Sanghyun Lee    schedule 15.07.2011


Ответы (1)


Почему бы не попробовать:

var DadosUtente = true;
var DevolucaoModelo = {
    getUtNome : function() { return (DadosUtente) ? $("#UT_Nome") : $("#Equipamento_Nome")}
};

Обновлять

Если вы не хотите вызывать функцию, сделайте это так:

var DadosUtente = true;
var DevolucaoModelo = {
    UtNome : (DadosUtente) ? $("#UT_Nome") : $("#Equipamento_Nome")
};

Затем назовите его как DevolucaoModelo.UtNome.

person Shef    schedule 15.07.2011
comment
Потому что я искал альтернативное решение, которое не требует вызова функции - person Gui; 15.07.2011
comment
@guilhermeGeek: средства доступа и мутаторы — это функции. Просто используйте функцию. Это избавит вас от горя, и нет причин не делать этого. - person Lightness Races in Orbit; 15.07.2011
comment
Shef таким образом не работает, потому что, если вы измените DadosUtente на false, объект все равно будет возвращать $(#UT_Nome). Вместо этого я буду использовать функции, спасибо;) - person Gui; 15.07.2011
comment
@guilhermeGeek: Если он должен измениться после первого выполнения, конечно, вам нужны функции. - person Shef; 15.07.2011
comment
Да, приятель, он меняется после первого исполнения. Наверное, я слишком привык к C#, мне действительно нужно лучше знать JS. Всем спасибо за ответы ;) - person Gui; 15.07.2011