我想要有 getter 来初始化对象的方法
var phas = new Proxy({b:9,
cont:0,
statistic:function(){
console.log(this.cont)
this.cont++
}
}, {
has: function (target, key) {
if (key == "a") return false;
return true;
},
apply: function () {
console.log('run call ')
}
}
)
phas.run();
Uncaught TypeError: phas.run is not a function
最佳答案
您似乎误解了代理的工作原理。
当您创建代理时,您就在该对象上创建了代理。代理不会自动将其自身扩展到对象的属性。
apply
陷阱仅适用于函数,如果您代理一个函数,然后调用它,它将按您的预期工作。
如果您想动态创建方法,则需要执行以下操作:
var p = new Proxy({}, {
get: function(target, prop) {
// If the property exists, just return it
if (prop in target)
return target[prop];
// Otherwise, return a function
return function() { console.log("Some method", prop); };
}
});
p.run() //Logs: Some method run
typeof p.a == 'function' // true
关于javascript - 代理申请方法不调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42024588/