Ответ 1
IE8 использует defineProperty
, но только для объектов DOM. Но, предположительно, в конечном итоге это также будет для объектов JavaScript.
По какой-то причине Javascript getters/setters для пользовательских объектов, похоже, работает с любым браузером, но IE.
Есть ли у IE какой-либо другой нестандартный механизм для этого? (Как и во многих других функциях)
Если нет, существуют ли какие-либо обходные пути для достижения той же функциональности?
IE8 использует defineProperty
, но только для объектов DOM. Но, предположительно, в конечном итоге это также будет для объектов JavaScript.
Resig post ссылается на свою реализацию env.js, когда он использует методологию геттеров и сеттеров, которые вы ищете. Причина, по которой этот стиль работы отлично подходит для него, заключается в том, что они не используются в среде на основе браузера, env.js ориентирован прежде всего на серверные JS или среды сценариев, такие как Rhino.
Чтобы справиться с совместимостью браузера, а также сфокусироваться на аспекте, который делает JavaScript очень хорошо, используйте закрытие для ваших методов getter и setter для защиты свойств объекта.
Например:
foo: function(val) {
var bar = val;
this.setBar: function(newBar) {
bar = newBar;
},
this.getBar: function() {
return bar;
}
}
Это приведет к:
var checkFoo = foo("cool!");
alert(checkFoo.getBar()); //cool!
checkFoo.setBar("nice!");
alert(checkFoo.getBar()); //nice!
Доступно решение для IE6 +, которое использует событие onpropertychange и более новый spec defineProperty. Небольшой улов состоит в том, что вам нужно сделать вашу переменную dom-объектом.
Полная информация:
http://johndyer.name/native-browser-get-set-properties-in-javascript/
Для старых браузеров IE вы также можете использовать VB для эмуляции getter и setter Взгляните на это getters и сеттеры для всех IE с перекрестным браузером VBClass!