Javascript 如果不存在,请创建一个方法
我试图模拟一个对象,它在JSBin中有许多方法。我不想重新定义整个方法是JSBin。主要是因为方法被频繁添加,我只是想探索我想要的东西是否可能。有没有一种方法可以创建一个对象,这样无论对它调用什么方法,它都会返回一个任意值Javascript 如果不存在,请创建一个方法,javascript,Javascript,我试图模拟一个对象,它在JSBin中有许多方法。我不想重新定义整个方法是JSBin。主要是因为方法被频繁添加,我只是想探索我想要的东西是否可能。有没有一种方法可以创建一个对象,这样无论对它调用什么方法,它都会返回一个任意值 var ret = { //no methods }; var result = ret.getSomeVal("funny_cat.gif"); console.log(result); //funny_cat.gif 有什么东西可以拦截对ret的调用并自动创
var ret = {
//no methods
};
var result = ret.getSomeVal("funny_cat.gif");
console.log(result); //funny_cat.gif
有什么东西可以拦截对
ret
的调用并自动创建returnSomeVal
方法,这样它就可以返回传递给它的任何参数了吗?在Ruby中,这个特性称为方法\u missing
。它是一个方法,当您调用尚未在对象上定义的方法时,它就会被调用
从那时起,你可以做任何你想做的事情,比如给自己发一封电子邮件,通知你有用户试图调用一个未定义的方法,或者甚至让method\u missing
在这些情况下返回一些默认响应
我发现javascript缺少方法的这个端口。它看起来像是你想要的:
被设计成允许像这样接球
代理是程序员必须用JavaScript定义语义的对象
因此,您可以重新定义obj[…]
以返回未定义属性的默认值,而不是undefined
。它们是EcmaScript.next的计划API,因此尚未标准化,尽管随着规范的最终确定,许多浏览器已经实现了它们
对于任何类型,返回37
您可以修改它以返回一个方法
?
var handler = {
get: function(target, name){
return name in target?
target[name] :
37;
}
};
var p = new Proxy({}, handler);
function returns_37() { return 37; }
var handler = {
get: function(target, name){
return name in target?
target[name] :
returns_37;
}
};
var p = new Proxy({}, handler);