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

use*_*716 13 javascript default key function 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
Run Code Online (Sandbox Code Playgroud)

myobj如果func4()在保留myobj.functionCall()格式的同时没有定义键/函数(如),是否可以创建一个"全能"键?

Joc*_*oel 27

您可以使用Proxy和getter函数创建一个带有'wildcard'或'catch-all'键的JavaScript对象.与提供的解决方案不同,Proxy应该适用于任何环境,包括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"
Run Code Online (Sandbox Code Playgroud)

如果希望属性可以调用,只需返回一个函数:

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


specialFoo.callMe() // this will print derp
Run Code Online (Sandbox Code Playgroud)

详细信息:有关mozilla的文档


Joe*_*ldi 16

您正在寻找__noSuchMethod__:
所有属性的JavaScript getter

  • 不幸的是,不,它不是JavaScript标准的一部分. (3认同)
  • 可能是因为它必须是Gecko限制......太糟糕了,Mozilla将此方法称为"非标准". (2认同)
  • 所以答案是它不是 javascript 的标准特性。听起来对吗? (2认同)