Javascript 如果不存在,请创建一个方法

Javascript 如果不存在,请创建一个方法,javascript,Javascript,我试图模拟一个对象,它在JSBin中有许多方法。我不想重新定义整个方法是JSBin。主要是因为方法被频繁添加,我只是想探索我想要的东西是否可能。有没有一种方法可以创建一个对象,这样无论对它调用什么方法,它都会返回一个任意值 var ret = { //no methods }; var result = ret.getSomeVal("funny_cat.gif"); console.log(result); //funny_cat.gif 有什么东西可以拦截对ret的调用并自动创

我试图模拟一个对象,它在JSBin中有许多方法。我不想重新定义整个方法是JSBin。主要是因为方法被频繁添加,我只是想探索我想要的东西是否可能。有没有一种方法可以创建一个对象,这样无论对它调用什么方法,它都会返回一个任意值

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);