代码之家  ›  专栏  ›  技术社区  ›  user113716

有没有一个javascript对象的catch all键?

  •  11
  • user113716  · 技术社区  · 14 年前

    考虑下面的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
    

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

    2 回复  |  直到 7 年前
        1
  •  16
  •   Community Egal    7 年前

    你在找 __noSuchMethod__ :
    JavaScript getter for all properties

        2
  •  20
  •   glennsl Namudon'tdie    7 年前

    您可以使用代理和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
    

    细节: documentation on mozilla