2015-01-08 10 views
7

Mój angielski nie jest dobry, ale postaram się jak najlepiej wyjaśnić moje pytanie po prostu. Opis: wynik alertu to 1, nie wiem dlaczego, myślę, że powinien to być rok 2015, aby ostrzec.Jak używać settera i gettera w javascript, napotkałem błąd

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); 

Odpowiedz

10

Trzeba dodać zapisywalny: true jak ten

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

dla __year_.

Od Mozilla Developer Network:

zapisu

prawdziwe wtedy i tylko wtedy, gdy wartość związana z nieruchomości mogą być zmieniane za pomocą operatora przypisania. Wartość domyślna to false.

+2

niezły połów; Zastanawiam się, dlaczego nie widzę częściej używanej metody defineProperties(). Zwróć uwagę, że gdy używasz bardziej typowej Object.defineProperty() dla istniejącej właściwości obiektu, ta flaga jest już ustawiona, więc nie będzie potrzeby wyraźnego wymieniania zapisu. – dandavis

+2

@dandavis: Właściwie pracuję głównie nad JavaScriptem od dłuższego czasu i ** nigdy ** o tym nie słyszałem. Z pewnością zajrzę w to więcej. –

Powiązane problemy