Je veux définir un comportement sur des objets JavaScript qui commence lorsque l'attribut / méthode référencé n'existe pas.
En Lua, vous pouvez le faire avec des métabiles et des méthodes donc je me demande s'il y a quelque chose de similaire dans JavaScript. p> Ce que j'essaie d'atteindre est une interface RPC générique qui fonctionne comme ceci (non valide Javascript): p> alors comment puis-je faire cela? P> peut-il même être fait? P> p> __ index et __Newindex code>.
4 Réponses :
Je suppose que votre besoin réel est plus compliqué que l'exemple, car vous ne faites rien avec les paramètres que vous passez à Servermethoda code> et
serveurmethodb code>, et sinon vous ferait juste quelque chose comme
dans les moteurs JavaScript qui ne fournissent pas JavaScript ressemble plus à un schéma que ce qu'il est comme SmallTalk (qui prend en charge la méthode non définie) ou Lua. Malheureusement, votre demande n'est pas prise en charge au mieux de mes connaissances. P> Vous pouvez imiter ce comportement avec une étape supplémentaire. P> donc votre exemple devient donc votre exemple devient < / p> plus de fonctionnalités pourrait être implémentée en CAO, mais cela vous donne l'idée ... Vous pouvez même l'utiliser comme mécanisme d'appel qui appelle la fonction avec des arguments s'il existe, contourner l'étape supplémentaire que j'ai introduite. p> p> proxy code> < / a> objets, qui peuvent être utilisés pour y parvenir.
proxy code>, cette fonctionnalité est toujours indisponible. Dans ces moteurs, les idiomes qui à Lua s'appuieraient sur
__ index code> et
__ newindex code> devront être exprimés d'une autre manière, comme ci-dessous. P>
J'ai un peu imaginé que Javascript avait un __index et que je ne pouvais tout simplement pas le trouver, mais il semble que j'avais tort. Merci pour l'information et le tour. C'est assez bon pour mes besoins!
Just Fyi: Firefox prend en charge une non-standard __ Nosuchmethod __ < / code>
extension. P>
Merci pour les informations, malheureusement, j'ai besoin de compatibilité croisée croisée, mais bien de savoir, peut-être que d'autres suivront la suite
Demandé 8 ans, il y a 8 mois p>
Maintenant, nous pouvons utiliser "proxy" p>
Un moyen simple d'utiliser: p>
- Code LUA P>
let o= new Proxy({},{ get: function (target, key, receiver) { let ret = Reflect.get(target, key, receiver); if (!target.hasOwnProperty(key)){ console.log("tried to undefined key "+key); } return ret; } }) >> undefined o.a >> VM383:5 tried to undefined key a >> undefined o.a = 1 >> 1 o.a >> 1