2017-08-09 2 views
1

Comment est-ce que j'appliquerais un getter/setter à un objet lui-même en le définissant?Comment appliquer un Getter/Setter à un objet

Par exemple, je veux faire

myobj = 123 run console.log(123)

Je sais qu'il est possible à l'aide class extends, mais je veux trouver un moyen plus simple qui définit le getter/setter, éventuellement dans le constructeur.

Est-ce que quelqu'un sait comment? Est-ce seulement possible?

Si vous avez besoin de plus d'informations, ou si je n'étais pas assez clair, faites le moi savoir. - JacobTDC

+0

Il n'y a pas objet 'myobj = 123' – MinusFour

+0

@MinusFour, qui était juste un exemple. – JacobTDC

Répondre

0

getters et setters sont pertinentes pour les propriétés de l'objet, pas pour l'affectation de variables, comme dans votre question. Le class extends n'est pas vraiment pertinent ici.

Vérifiez ceci par exemple [1]:

var language = { 
 
    set current(name) { 
 
    this.log.push(name); 
 
    }, 
 
    log: [] 
 
} 
 

 
language.current = 'EN'; 
 
console.log(language.log); // ['EN'] 
 

 
language.current = 'FA'; 
 
console.log(language.log); // ['EN', 'FA']

1 code tiré de MDN

+0

Oui, je réalise que c'est possible, je ne veux pas le faire comme ça. – JacobTDC

+0

Je crains que l'assignation de variable ne soit pas quelque chose que vous pouvez "getter" en javascript (et je ne suis même pas sûr quelle langue supporte cela). – Dekel

+0

Merci pour la clarification. – JacobTDC

0

Ceci est en réalité bien décrit au MDN Working with Objects, Defining getters and setters - cet article fournit un exemple simple de getters et utilisation de setters en JavaScript.

une version modifiée (pour adapter à votre problème) version de cet exemple ressemblerait à ceci:

var o = { 
    set myvar(value) { 
     console.log(value); 
     this.myvar = value; 
    } 
}; 

o.myvar = 123; 
// Should call console.log(123) 

Il y a aussi une autre façon de le faire - vous pouvez utiliser ES2015 proxies et leurs get() et set() pièges . Cela peut être utile dans des situations où, pour une raison quelconque, vous ne voulez pas modifier l'objet original.

Ces deux proxys sont "globaux" par objet (comme dans - ils attrapent des ensembles/get effectués sur TOUTES les propriétés de l'objet mandaté). Voici un exemple simple, basé sur l'article lié:

var o = new Proxy({}, { 
    set: function(target, prop, value, receiver) { 
     target[prop] = value; 

     // "set" proxy is global, so it will catch calling assignment operator on ALL properties of this object 
     if (prop === "myvar") { 
      console.log(value) 
     } 

     return true 
    } 
}); 

o.myvar = 123; 
// Should call console.log(123) 
+0

Pourriez-vous m'indiquer où dans la page qui est décrite, parce que j'ai regardé cette page exacte au cours des 30 dernières minutes, et tout commence à se ressembler. – JacobTDC

+0

Le premier lien que j'ai fourni pointe directement vers le dit exemple (celui avec getter défini sur la propriété '' b''). – mdziekon

+0

J'ai édité ma réponse avec deux exemples, peut-être que cela aidera un peu. – mdziekon

0

Vous pouvez utiliser Object.defineProperty() pour définir un setter pour la propriété:

var a = {} 
Object.defineProperty(a, 'myobj', { 
    set: function (value) { 
    console.log(value) 
    } 
}) 
a.myobj = 111