15

考虑以下 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

如果在保留格式myobj的情况下没有定义键/功能(如中),是否可以创建一个“包罗万象”的键?func4()myobj.functionCall()

4

2 回答 2

30

您可以使用 Proxy 和 getter 函数创建带有“通配符”或“catch-all”键的 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

详细信息:有关 Mozilla 的文档

于 2016-05-25T20:26:42.417 回答
16

您正在寻找__noSuchMethod__
适用于所有属性的 JavaScript getter

于 2010-03-01T17:25:43.887 回答