【发布时间】:2020-12-26 10:27:39
【问题描述】:
我想知道我能做什么:
var o={
__call : function(methodname,arguments){
alert(methodname);
}
};
o.hello(); <-alerts 'hello'
类似php的魔术方法__call
我本质上想要做的是调用将存在但在代码首次运行时未知的函数,我可以通过类似的方式来实现
function fn(){
var s='mod';
var o=mod;
var n=arguments.length;
for(var i=0;i<n;i++){
var name=arguments[i];
s+='.'+name;
if(!o[name])return ()=>s+' not found';
o=o[name];
}
return o;
}
var mod={
square:{
area:r=>r*r
}
};
var a=fn('square','area')(5); console.log(a);
var a=fn('circle','area')(6); console.log(a);
但我更喜欢使用
var a=mod.square.area(5); console.log(a);
var a=mod.circle.area(6); console.log(a);
【问题讨论】:
-
它似乎没有按我的意愿工作,尽管我正在研究它,但 getter 基本上需要知道它们是作为属性还是方法被调用,这是 php 的 __call 方法的一个方面,如果他们知道的话,他们可以返回新的代理或函数来收集参数
标签: javascript object