JavaScript позволяет методы считывания и методы set?

это - мой код:

<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.

спасибо

9
задан ChaosPandion 2 August 2010 в 00:21
поделиться

4 ответа

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

6
ответ дан 4 December 2019 в 11:03
поделиться

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

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

Получатели и сеттеры с JavaScript

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

3
ответ дан 4 December 2019 в 11:03
поделиться

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

Получатели и сеттеры JavaScript

0
ответ дан 4 December 2019 в 11:03
поделиться

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

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

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

  1. Если литерал вашего объекта имеет свойство значения, он не может иметь геттер или сеттер, и наоборот.
  2. У вашего литерала объекта не может быть более одного геттера или сеттера с одним и тем же именем.

Лучше всего использовать эту функцию с помощью функции Object.defineProperty .

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"
10
ответ дан 4 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: