javascript对象是否有一个全包键?

javascript对象是否有一个全包键?,javascript,function,key,default,catch-all,Javascript,Function,Key,Default,Catch All,考虑以下javascript示例: var myobj = { func1: function() { alert(name in this) }, func2: function() { alert(name in this) }, func3: function() { alert(name in this) } } myobj.func2(); // returns true myobj.func4(); // unde

考虑以下javascript示例:

var myobj = {   func1: function() { alert(name in this) },
                func2: function() { alert(name in this) },
                func3: function() { alert(name in this) }
}

myobj.func2(); // returns true
myobj.func4(); // undefined function

如果没有定义键/函数(如
func4()
),同时保留
myobj.functionCall()
格式,是否可以为
myobj
创建一个将被调用的“catch all”键?

您正在查找的
\u noSuchMethod\uuu


您可以使用代理和getter函数创建具有“通配符”或“捕获所有”键的JavaScript对象。与提供的解决方案不同,代理应该可以在几乎任何环境中工作,包括Node.js

var foo = new Object()

var specialFoo = new Proxy(foo, {
    get(target,name) {
        // do something here
        return name
    }
})

console.log(specialFoo.blabla) // this will output "blabla"
如果希望属性可调用,只需返回一个函数:

var specialFoo = new Proxy(foo, {
    get(target,name) {
        return function() {
            console.log('derp')
            return name
        }
    }
})


specialFoo.callMe() // this will print derp

细节:

真的吗?想指出一点吗?如果你能找到,我将删除这个问题。@Pointy-你是说你无法想象它是如何在语言中实现的?如果是这样的话,那么像*这样的通配符键怎么样?我是说我太笨了,无法想象它是如何实现的:-)而且,语义看起来很复杂;你能得到一个通配符条目吗?如果你把它的值设为37而不是函数呢?@patrick:上周有一个问题和你的问题很像。。。无法找到它,尽管…@Pointy-键是唯一的,因此只允许使用一个通配符(在我的想象世界中)。如果它不包含函数,您可能会得到与对任何其他不包含函数的键调用函数相同的结果。Hmmm。。。我尝试了它
\uuuNoSuchMethod\uuuuuuo:function(){alert('catch it')},
,但没有被调用。有趣的是。。。当我使用Firefox时,它会被调用,但不是Safari。可能是因为它必须是Gecko限制的。。。糟糕的是,Mozilla将这种方法称为“非标准”,所以答案是它不是javascript的标准特性。听起来正确吗?不幸的是,不,它不是JavaScript标准的一部分。“关于任何环境”,但不是IE:(@Christian您可以在IE中使用polyfill作为代理。如果需要,只需包括。请参阅此处的更多信息:至少polyfill不支持用例:“这意味着您要代理的属性必须在创建时已知。"@Christian嗯。真的吗?根本没有办法在IE上实现一个包罗万象的代理,period?在任何版本上都没有?可能是其他的polyfill?我想知道这一点。你能确认吗?嗯,那是从你提供的链接中引用的。我不知道是否有可能创建另一个polyfill…至少我还没有找到一个可以不要这样做。