是否存在javascript对象的全能键?

时间:2010-03-01 17:12:48

标签: 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(); // undefined function

如果没有定义键/函数(如myobj中所述),同时保留func4(),是否可以为myobj.functionCall()创建一个“全能”键格式?

2 个答案:

答案 0 :(得分:22)

您可以使用'通配符'创建JavaScript对象。或者' catch-all'密钥使用代理和getter功能。与提供的解决方案不同,代理应该适用于任何环境,包括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

详细信息:documentation on mozilla

答案 1 :(得分:16)

您正在寻找__noSuchMethod__
JavaScript getter for all properties