2016-11-15 1 views
0

Wenn ein js Klasse deklarieren wir die Getter und Setter für Eigenschaften dieser Klasse wie so definieren:Javascript Getter und Setter auf Klasse selbst

class Foo{ 

    get bar(){ 
     return 'foo-bar'; 
    } 

    set bar(n){ 
     this.baz = n * 10; 
    } 

} 

let foo = new Foo(); 

console.log(foo.bar) //foo-bar 

foo.bar = 7; 
console.log(foo.baz) //70 

Was ich frage mich, ist, wie würde ich Getter und Setter definieren auf die Klasse selbst? So würde zum Beispiel foo = 7 einen Code-Block auslösen und console.log (foo) würde 'foo-bar' ausgeben.

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters – saj

+1

Eine Frage: warum? – Li357

+0

Wenn Sie einer Variablen zuweisen, wird der alte Wert der Variablen vollständig ignoriert, sie erhält keine Chance zum Abfangen. – Barmar

Antwort

0

Sie können nicht.

foo = 7; 

Wird neu zuweisen foo-7.

+0

Sind Sie sich sicher? Ich nahm an, dass es eine Möglichkeit gibt, da auch foo.bar = 7 foo.bar 7 nicht zuweist. –

+0

@ Jrs.b, die keinen Sinn machte ... warum würde 'foo.bar = 7 '7 zu' foo.bar' zuweisen? Warum sollte 'foo' * nicht' foo' * ändern? – Li357

+0

@ Jrsb Das liegt daran, dass es das Objekt durchläuft, wenn es auf die Eigenschaft 'bar' zugreift. Das Objekt kann es zum Getter/Setter umleiten. – Barmar

2

Sie können nicht. foo = bedeutet, dass Sie der Variablen foo einen Wert zuweisen. Das Beste, was Sie tun können, ist, einen Konstruktor zu verwenden, um Code auszuführen, wenn eine Instanz Ihrer Klasse erstellt wird.

class Foo{ 

    constructor(){ 
    console.log('A Foo instance has been created!'); 
    } 

    get bar(){ 
    return 'foo-bar'; 
    } 

    set bar(n){ 
    this.baz = n * 10; 
    } 

} 

Einige Sprachen haben auch eine destructor Spezifikation, wenn ein Wert zerstört wird oder sich außerhalb des Geltungsbereichs und schließlich durch einen Garbage Collector aufgeräumt, etc, aber es6 verfügt nicht über diese Funktionalität.