2015-01-08 3 views
7

Mein Englisch ist nicht gut, aber ich werde mein Bestes versuchen, meine Frage einfach zu erklären. Beschreibung: Alert Ergebnis ist 1, ich weiß nicht warum, ich denke, das sollte 2015 zu warnen.Wie Setzer und Getter in Javascript verwenden, traf ich einen Fehler

var book = {}; 
    Object.defineProperties(book, { 
      _year: { 
       value: 1 
      }, 
      edition: { 
       value: 23 
      }, 
      year: { 
       get: function() { 
        return this._year; 
       }, 
       set: function (newValue) { 
        if (newValue > 2004) 
         this._year = newValue; 
       } 
      } 
     } 
    ); 
    book.year = 2015; 
    alert(book.year); 

Antwort

10

Sie müssen beschreibbaren hinzufügen: true wie diese

_year: { 
    value: 1, 
    writable: true 
}, 

für __year_.

Von Mozilla Developer Network:

beschreibbaren

wahr, wenn und nur wenn der Wert mit der Eigenschaft zugeordnet ist, kann mit einem Zuweisungsoperator geändert werden. Standardeinstellung ist false.

+2

schöner Fang; Ich habe mich gefragt, warum ich defineProperties() nicht häufiger benutze. Beachten Sie, dass wenn Sie die häufigere Object.defineProperty() für eine vorhandene Objekteigenschaft verwenden, dieses Flag bereits festgelegt ist, so dass Sie writeable nicht explizit erwähnt benötigen. – dandavis

+2

@dandavis: Eigentlich arbeite ich schon seit einiger Zeit hauptsächlich an JavaScript und ich habe ** noch nie davon gehört. Ich werde definitiv mehr darüber schauen. –

Verwandte Themen