Pull to refresh

Comments 26

По сути, мы можем задавать именованные функции-обработчики. Вот и всё. Не знаю, зачем это кому-то понадобится.
Я думаю это на будущее для strict mode из ECMAscript 5, там хотят избавиться от arguments.callee.
Internet Explorer, как всегда, сказал «мне с вами не по пути» и сделал getter'ы и setter'ы своим собственным способом.
defineProperty тоже, кстати, из ECMAscript 5, так что тут все хорошо, Microsoft стоит упрекать только в том, что этот функционал доступен для встроенных объектов.
Да, defineProperty — это неплохо. Вот только плохо, что все, кроме IE, не реализовали defineProperty. А IE — напротив, не реализовал get/set/__define[GS]etter__
удивительно, один IE реализовал стандарт ECMAscript, а остальные не хотят этого делать
Когнитивный диссонанс :)
Удивительно, но стандарт не предоставляет возможностей, аналогичных __lookupGetter__, т.е. программно невозможно понять это геттер\сеттер или обычный объект, что бывает иногда необходимо.
Прекрасный пост. Беру на заметку.
В примере для Шаг 2 Вы сделали ошибку:
Вы описываете функцию-конструктор, но вместо this._secretProperty = newVal; написали var _secretProperty = newVal;

Это как раз таки и есть суть шага 2, переменная _secretProperty объявлена через var и является локальной, доступна только внутри функции (в данном случае функции-конструктора), getter'ы/setter'ы получают к ней доступ через механизм замыканий, иначе кроме как через них получить к ней доступ извне не получится, вот соот-но и выходит приватное свойство.
Вам следует почитать про замыкания в JS.
document.body.onpropertychange = function() {
  var pn = event.propertyName;
  var pv = event.srcElement[event.propertyName];
  if (pn == "description")
    alert(pv);
}


* This source code was highlighted with Source Code Highlighter.


Для IE 5.0+ event не определен, event = window.event
IE 5.0 — IE 7.0 | Engine: Trident (unversioned) (JS engine: Jscript 5.0 — Jscript 7.0)
IE 8.0+ | Engine: Trident 4.0+ (JS engine: Jscript 8.0+)


С версиями напутали, поправьте пожалуйста.
> Это — самый простой и очевидный случай. Но и самый плохой. Храня данные в this, мы никак не скроем их от «злого хакера».

Ох уж эти злые хакеры. Они хотят изменить мои объекты, сволочи!!!

На самом деле мотивацией введения getter/setter является абстракция данных, а не «злые хакеры» (data abstraction != data hiding).
UFO just landed and posted this here
Спасибо, исчерпывающая информация о геттерах/сеттерах.
А в IE8 всё-таки красивый синтаксис…
UFO just landed and posted this here
Насчет других браузеров незнаю, а та же опера например позволяет выполнять яваскрипт на текущей странице через адресную строку, ну и возможно с помощью userjs можно вклиниться в работающий скрипт, насчет этого не уверен.
UFO just landed and posted this here
Я неверно высказался. Тут скорее защита не от хакеров, а от других разработчиков :)
жаль, что для IE нужно так извращаться:( — я бы не хотел чтобы все мои объекты на поверку были дом нодами:(
Да, это наверное самое главное препятствие перед использованием данных техник на практике
Cупер, спасибо за инфу, буду знать. В Интернете я её не нашёл (хотя я просто позабыл про VBscript)
Сам случайно наткнулся, пока не знаю зачем, но наверняка такую технику еще для чего нибудь можно использовать :)
эх, не туда коммент запостил (
Sign up to leave a comment.

Articles