Ответ 1
В следующей версии ECMAScript это должно быть довольно просто, используя Object.observe. Подробнее здесь: http://addyosmani.com/blog/a-few-new-things-coming-to-javascript/
Механизм JavaScript Spider-Monkey реализует функцию обратного вызова __noSuchMethod__
для объектов JavaScript.
Эта функция вызывается всякий раз, когда JavaScript пытается выполнить метод undefined объекта.
Я хотел бы установить функцию обратного вызова для объекта, который будет вызываться всякий раз, когда к объекту, к которому осуществляется доступ или назначается свойство undefined.
Я не нашел функцию __noSuchProperty__
, реализованную для объектов JavaScript, и я являюсь любопытным, если есть какое-либо обходное решение, которое достигнет того же результата.
Рассмотрим следующий код:
var a = {};
a.__defineGetter__("bla", function(){alert(1);return 2;});
alert(a.bla);
Это эквивалентно [alert(1);alert(2)]
- даже если a.bla undefined.
Я хотел бы добиться того же результата, но с неизвестными свойствами (т.е. не зная заранее, что доступ к свойствам "бла" будет доступным)
В следующей версии ECMAScript это должно быть довольно просто, используя Object.observe. Подробнее здесь: http://addyosmani.com/blog/a-few-new-things-coming-to-javascript/
Я хотел бы установить функцию обратного вызова для объекта, который будет вызываться всякий раз, когда к объекту, к которому осуществляется доступ или назначается свойство undefined.
Хотя это не исчерпывающий ответ, имейте в виду, что назначение свойств undefined объекта является ключевой особенностью языка JavaScript.
Также обратите внимание, что __noSuchMethod__
является нестандартным методом, реализованным с помощью движков Mozilla JavaScript. Существует открытый запрос функции, чтобы это было реализовано в движке Google Chrome V8, но насколько я знаю, это не поддерживается в других браузерах.
По состоянию на февраль 2014, Похоже, что это не будет поддерживаться в ближайшее время.
Надеюсь, ребята, я думаю, нам нужно проголосовать за эту функцию в списке выпусков Google V8, здесь http://code.google.com/p/v8/issues/detail?id=264
Похоже, что здесь очень мало внимания уделяется этой важной функции: (