это - мой код:
<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.
спасибо
Это возможно в некоторых движках, и это указано в спецификации для EcmaScript 5 , поэтому в будущем он должен получить более широкое распространение. Таблица совместимости напрямую не касается этого, но, скорее всего, она будет следовать за defineProperties
, который предоставляет API для выполнения тех же действий. Как указывалось ранее, у Джона Ресига есть хорошая статья о новых API объектов и свойств .
Javascript теперь действительно поддерживает методы получения и установки. У Джона Ресига есть хорошая запись в блоге о них здесь .
В статье Джона хорошо упоминается несколько различных способов определения геттеров / сеттеров для объектов Javascript, но не очень хорошо описывается, когда каждый метод применим. Я считаю, что это гораздо более эффективно реализовано в более позднем сообщении блога Роберта Наймана:
Получатели и сеттеры с JavaScript
(в этой статье также представлен стандарт ECMAScript Object.defineProperty
)
Да, может. Вот хороший пост об этом от Джона Ресига, создателя jQuery:
Да, это так. Эта функция была добавлена в ECMAScript 5.
PropertyAssignment: PropertyName : AssignmentExpression get PropertyName() { FunctionBody } set PropertyName( PropertySetParameterList ) { FunctionBody }
Вот несколько вещей, которые следует помнить при использовании этого синтаксиса.
Лучше всего использовать эту функцию с помощью функции 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"