我正在尝试模拟一个在JSBin中有许多方法的对象。我不想重新定义整个方法是JSBin。主要是因为方法经常被添加,我只是试图探索我想要的是否可能。有没有办法可以创建一个对象,这样无论调用什么方法,它都会返回一个任意值?
var ret = {
//no methods
};
var result = ret.getSomeVal("funny_cat.gif");
console.log(result); //funny_cat.gif
是否可以拦截对ret
的此调用并自动创建returnSomeVal
方法,以便它只返回传递给它的任何参数?
答案 0 :(得分:1)
在Ruby中,此功能称为method_missing
。无论何时调用尚未在对象上定义的方法,都会调用此方法。
从那时起,你可以做任何你想做的事情,比如给自己发一封电子邮件,通知你有些用户试图调用未定义的方法,甚至让method_missing
在这些情况下返回一些默认响应。 / p>
我发现此method_missing
的端口为javascript。它看起来像你想要的:
答案 1 :(得分:1)
Proxies旨在允许像这样的所有人。
代理是程序员必须在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);