#javascript #class
#javascript #класс
Вопрос:
есть ли эквивалент в javascript для следующего кода C #
public class Class
{
public string str
{
get;
set;
}
}
Я пытаюсь сделать что-то вроде этого
var list = function () {
this.settings = {
id: 1
};
this.id = //something
}
var List = new list();
alert(List.id); //alerts 1
List.id = 5; // should set this.settings.id = 5
alert(List.settings.id); // alerts 5
Хотя этот ответ хорош для класса c #, я все еще не могу ссылаться на идентификатор следующим образом
var list = function() {
this.settings = {
_id: 0,
get id() { return this._id; },
set id(x) { this._id = x; }
};
this.id = this.settings.id;
}
var List = new list();
document.write(List.id "<br />");
List.id = 10;
document.write(List.settings.id "<br />");
что, вероятно, потому, что this.settings.id только возвращает значение обратно в this.id а не сам объект
Ответ №1:
В этой вики-статье подробно описываются свойства Object.defineProperties http://en.wikipedia.org/wiki/Property_ (программирование)#JavaScript
Ответ №2:
var o = {
_p: 5,
get p() { return this._p; },
set p(x) { this._p = x; }
};
Комментарии:
1. Потрясающе! чем меньше, тем лучше. Не работает ниже IE9, а только что протестирован в Opera, FF и Safari и отлично работает .. очень любезно
![]()
Ответ №3:
Да, у Джона Ресига есть отличная статья об этом, основная идея такова:
function Field(val){
var value = val;
this.__defineGetter__("value", function(){
return value;
});
this.__defineSetter__("value", function(val){
value = val;
});
}
Пример: http://jsfiddle.net/mu6jf /
Комментарии:
1. defineGetter и defineSetter сейчас вышли из моды . Попробуйте Object.defineProperty для кроссбраузерного решения. Работает и в IE9!
2. @ChrisNielsen Моя жена говорит мне, что все, что я ношу, тоже вышло из моды. Если вы хотите дать ответ на этот вопрос, я проголосую за вас.