javascript Harmonia и Proxy
Что думаете по этому поводу? Это же жесть как мощно! https://developer.mozilla.org/en/Jav..._Objects/Proxy |
А __noSuchMethod__ так и остался нестандартным?
|
хз но пока это всего лишь черновик
|
что такое __noSuchMethod__ ?
|
Цитата:
https://developer.mozilla.org/en/Jav...t/NoSuchMethod
({
__noSuchMethod__: function(meth, args){
//обработчик: meth === 'method', args ~ [1,2,3]
}
}).method(1,2,3); //не выдаст ошибки
В общем, не нашел чего-то очень полезного. Хотя я и не сильно углублялся. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Но если бы была такая ловушка(а что её нет я не уверен), можно сделать так же как и в случае с обычным доступом к свойству. Смотреть есть ли оно в нужном обьекте, если нет, то при желании можно сделать запрос к цепочке прототипов и посмотреть там. это я думаю не проблема. |
Эмуляция __noSuchMethod__
Используя Прокси возможно эмулировать хук __noSuchMethod__ в тех браузерах, которые его не поддерживают (но сейчас это не актуально).
function MyObject() {};
MyObject.prototype = Object.create(NoSuchMethodTrap);
MyObject.prototype.__noSuchMethod__ = function(methodName, args) {
return 'Hello, '+ methodName;
};
new MyObject().foo() // returns 'Hello, foo'
Этот объект использует NoSuchMethodTrap-прокси в котором ловушка get заменяет оригинальный __noSuchMethod__.
var NoSuchMethodTrap = Proxy.create({
get: function(rcvr, name) {
if (name === '__noSuchMethod__') {
throw new Error("receiver does not implement __noSuchMethod__ hook");
} else {
return function() {
var args = Array.prototype.slice.call(arguments);
return this.__noSuchMethod__(name, args);
}
}
}
});
|
| Часовой пояс GMT +3, время: 13:16. |