Разрешает ли JavaScript получение и установку? - PullRequest
9 голосов
/ 02 августа 2010

это мой код:

<script type="text/javascript">
var Note=function(){}
Note.prototype = {
    get id()
    {
        if (!("_id" in this))
            this._id = 0;
        return this._id;
    },

    set id(x)
    {
        this._id = x;
    }
}

var a=new Note()
alert(a.id)
</script>

этот стиль похож на python,

я впервые вижу этот код,

и вы можете датьмне еще пример о «получить» и «установить» в JavaScript.

спасибо

Ответы [ 4 ]

10 голосов
/ 02 августа 2010

Да, это так.Эта функция была добавлена ​​в ECMAScript 5.

PropertyAssignment:
    PropertyName : AssignmentExpression 
    get PropertyName() { FunctionBody } 
    set PropertyName( PropertySetParameterList ) { FunctionBody } 

Вот несколько вещей, которые следует помнить при использовании этого синтаксиса.

  1. Если у литерала объекта есть свойство value, оно не может иметь геттераили сеттер и наоборот.
  2. В вашем литерале объекта не может быть более одного геттера или сеттера с одинаковым именем.

Лучший способ использовать эту функцию - через Object.defineProperty function.

function Person(fName, lName) {
    var _name = fName + " " + lName;
    Object.defineProperty(this, "name", { 
        configurable: false, // Immutable properties!
        get: function() { return _name; } 
    });
}

Это позволяет вам получать красивые чистые объекты с инкапсуляцией.

var matt = new Person("Matt", "Richards");
console.log(matt.name);  // Prints "Matt Richards"
6 голосов
/ 02 августа 2010

Это возможно в некоторых движках, и это в спецификации для EcmaScript 5 , поэтому в будущем оно должно получить более широкое распространение. Таблица совместимости 1004 * не направлена ​​на это, но, скорее всего, будет следовать defineProperties, который предоставляет API для того же. Как указывалось ранее, у Джона Ресига есть отличная статья о новых API объектов и свойств .

3 голосов
/ 02 августа 2010

Javascript фактически поддерживает геттеры и сеттеры сейчас.У Джона Ресига есть хороший пост в блоге о них здесь .

Статья Джона хорошо описывает несколько различных способов определения методов получения / установки в объектах Javascript, но не помогаетработа по описанию, когда каждый метод применим.Я полагаю, что это гораздо эффективнее достигается в более поздней публикации в блоге Роберта Наймана:

Получатели и установщики с JavaScript

(эта статья также представляет стандарт ECMAScript Object.defineProperty)

0 голосов
/ 02 августа 2010

Да, может. Вот хороший пост об этом от Джона Резига, создателя jQuery:

JavaScript Getters and Setters

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...