Javascript Harmony代理,检测是否访问或调用了属性
有没有一种方法可以使用代理来检测是否执行了某个属性,或者是否刚刚访问了该属性Javascript Harmony代理,检测是否访问或调用了属性,javascript,ecmascript-harmony,Javascript,Ecmascript Harmony,有没有一种方法可以使用代理来检测是否执行了某个属性,或者是否刚刚访问了该属性 'use strict'; require('harmony-reflect'); var Stub = { method: function (a) { console.log('q' + a + this.q); } }; var ProxiedLibrary = { get: function (target, name, receiver) { if
'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的调用和get,最好是单独进行。尝试…捕获块不是一个选项
谢谢你我只是一个代理的初学者,但据我所知,代理无法满足你的需要。它只是把你要找的东西还给你,它不知道你要怎么用它 有没有一种方法可以使用代理来检测是否执行了某个属性,或者是否刚刚访问了该属性
'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
不,因为JavaScript不区分属性和方法。访问的都是属性,如果是函数,则可以调用它们的值
您需要返回一个函数(以便调用它),但也要模拟字符串,可能是通过篡改该函数对象的
.valueOf()
/.toString()
/@@toPrimitive
方法来实现的。-这可能就行了。但我认为寻找一个问题的解决方案我想到了一个过度工程的方法。无论如何谢谢你!哦,更好的是:,这样我可以使用和存储一些参数。你不需要为此继承任何东西,闭包就足够了。