Подтвердить что ты не робот

Javascript getters/seters в IE?

По какой-то причине Javascript getters/setters для пользовательских объектов, похоже, работает с любым браузером, но IE.

Есть ли у IE какой-либо другой нестандартный механизм для этого? (Как и во многих других функциях)

Если нет, существуют ли какие-либо обходные пути для достижения той же функциональности?

4b9b3361

Ответ 1

IE8 использует defineProperty, но только для объектов DOM. Но, предположительно, в конечном итоге это также будет для объектов JavaScript.

Ответ 2

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!

Ответ 3

Доступно решение для IE6 +, которое использует событие onpropertychange и более новый spec defineProperty. Небольшой улов состоит в том, что вам нужно сделать вашу переменную dom-объектом.

Полная информация:

http://johndyer.name/native-browser-get-set-properties-in-javascript/