2014-07-17 15 views
5

Perché JavaScript ha due modi diversi per ottenere/impostare le proprietà dell'oggetto?metodi get/set JavaScript rispetto ai metodi standard

Esempio:

//implementation 1 
var obj1 = { 
    "x":1, 
    get number() {return this.x}, 
    set number(n) {this.x = n} 
} 

//implementation 2 
var obj2 = { 
    "x":1, 
    getX: function(){return this.x}, 
    setX: function(n){this.x = n} 
} 

Vuol stile un'implementazione hanno vantaggi rispetto agli altri?

risposta

2

Il secondo ha il vantaggio principale di essere semplicemente un oggetto ol'javascript e quindi è ampiamente supportato!

Il primo, come si può vedere su MDN (get e set) è recente (ECMAScript 5.1) e poi sostenuta soltanto da IE9 + in particolare ...

Ho quindi consiglio la seconda implementazione (per il momento!) ...

+1

Questa non è una buona risposta poiché entrambi i metodi hanno intenzioni completamente diverse. Il "nuovo" metodo get/set assicura che questo getter/setter venga chiamato ogni volta che si accede alla proprietà in questione in modalità lettura/scrittura *** senza chiamare esplicitamente alcun metodo ***. L'implementazione 2 richiede ** di chiamare esplicitamente ** questi metodi, altrimenti non verranno eseguiti durante la lettura/scrittura della proprietà dell'oggetto. – connexo

4

A differenza dei metodi normali, l'utilizzo di get e set consente di operare direttamente sulle proprietà dell'oggetto (=== codice pulitore/minore), invocando effettivamente i metodi getter e setter "dietro le quinte".

var obj1 = { 
    "x":1, 
    get number() {console.log('get was called'); return this.x}, 
    set number(n) {console.log('set was called'); this.x = n} 
}; 

alert(obj1.number); // calls the getter (and prints to console) 

obj1.number = 10; // calls the setter (and prints to console) 

Come l'altra risposta citata, decidere per/contro utilizzare questo a seconda del set di browser di destinazione.

Problemi correlati