问题
Considering the following javascript example:
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
Is it possible to create a 'catch-all' key for myobj
that will get called if there is no key/function defined (as in func4()
) while retaining the myobj.functionCall()
format?
回答1:
You're looking for __noSuchMethod__
:
JavaScript getter for all properties
回答2:
You can create a JavaScript object with 'wildcard' or 'catch-all' keys using a Proxy and a getter function. Unlike the solutions provided, a Proxy should work in just about any environment, including 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"
If you want the properties to be callable, simply return a function:
var specialFoo = new Proxy(foo, {
get(target,name) {
return function() {
console.log('derp')
return name
}
}
})
specialFoo.callMe() // this will print derp
Details: documentation on mozilla
来源:https://stackoverflow.com/questions/2357618/is-there-such-a-thing-as-a-catch-all-key-for-a-javascript-object