C'è una cosa come un catch-all chiave per un oggetto JavaScript?
-
23-09-2019 - |
Domanda
Considerando l'esempio seguente 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
E 'possibile creare una chiave 'catch-all' per myobj
che andranno chiamato se non c'è una chiave / funzione definita (come in func4()
), pur mantenendo il formato myobj.functionCall()
?
Soluzione
Siete alla ricerca di __noSuchMethod__
:
getter JavaScript per tutte le proprietà
Altri suggerimenti
È possibile creare un oggetto JavaScript con 'jolly' o 'catture' tutte le chiavi usando una funzione getter Proxy e. A differenza delle soluzioni fornite, un proxy dovrebbe funzionare in qualsiasi tipo di ambiente, tra cui 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"
Se si desidera che le proprietà di essere callable, semplicemente restituire una funzione:
var specialFoo = new Proxy(foo, {
get(target,name) {
return function() {
console.log('derp')
return name
}
}
})
specialFoo.callMe() // this will print derp
Dettagli: documentazione su mozilla
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow