有没有办法使用代理来检测属性是否被执行,或者是否刚刚被访问?
'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,最好是分开模拟。 try...catch 块不是一个选项。
谢谢你
有没有办法使用代理来检测属性是否被执行,或者是否刚刚被访问?
不可以,因为 JavaScript 不区分属性和方法。这只是访问的属性,如果它是函数,则可以调用它们的值。
您需要返回一个函数(以便可以调用它),但也需要模仿一个字符串,也许可以通过篡改该函数对象的
.valueOf()
/.toString()
/[Symbol.toPrimitive]()
方法来实现。
我只是代理的初学者,但据我所知,代理不能做你需要的事情。它只是给你返回你正在寻找的属性,它不知道你将如何使用它。