Синтаксис прототипа Javascript - PullRequest
6 голосов
/ 13 февраля 2011

Это правильный синтаксис Javascript? Что это делает?

Parser.prototype = {

  // ...

  get currentState() {
    return this.state[this.state.length - 1];
  },

  // ...

}

См. https://github.com/LearnBoost/stylus/blob/master/lib/parser.js.

Спасибо!

1 Ответ

5 голосов
/ 13 февраля 2011

Он определяет getter :

Связывает свойство объекта с функцией, которая будет вызываться при поиске этого свойства.

Подробнее о Получателя и установщика .

Эта функция вызывается при доступе к свойству:

var sth = obj.currentState

Обратите внимание, что это не вызов функции (нет ()), но обычный доступ к свойству.

Соответствующий setter будет выглядеть так:

set currentState(value) {
  // do something with value
  // value would be 42 in the next example
}

и вызывается при назначении значения этому свойству, например,

obj.currentState = 42;

Ключевые слова get и set - специальные операторы, которые будут использоваться внутри литеральной нотации объекта,Вы также можете использовать __defineGetter__ и __defineSetter__:

Parser.prototype.__defineGetter__('currentStatus', function() {
    return this.state[this.state.length - 1];
});

Я не уверен, в какой версии он был представлен, хотя он может поддерживаться не всеми браузерами (особенно IE;)).

...