是否有办法使用Proxy来检测属性是否已执行,或者是否刚刚访问过该属性?
'use strict';
require('harmony-reflect');
var Stub = {
method: function (a) {
console.log('q' + a + this.q);
}
};
var ProxiedLibrary = {
get: function (target, name, receiver) {
if (name in target) {
return target[name];
}
if (MAGIC_EXPRESSION) {
return function() {
return 'Return from nonexistent function!';
};
}
return 'Property ' + name + ' is drunk and not available at the moment';
}
};
var Library = new Proxy(Stub, ProxiedLibrary);
console.log(Library.nonexistent); //Everything is cool
console.log(Library.nonexistent()); //TypeError we don't want
我非常想模仿php的__call和__get,最好是分开。尝试...抓住阻止不是一种选择。
谢谢
答案 0 :(得分:1)
我只是一个有代理的初学者,但据我所知,代理无法满足您的需求。它只是为您提供了您正在寻找的财产,它无法知道您将如何使用它。
答案 1 :(得分:1)
是否有办法使用Proxy来检测属性是否已执行,或者是否刚刚访问过该属性?
不,因为JavaScript不区分属性和方法。它只是被访问的属性,如果它是一个函数,则可以调用它们的值。
您需要返回一个函数(以便可以调用它),但也可以通过篡改该函数的.valueOf()
/ .toString()
/ @@toPrimitive
方法来模仿字符串对象