C # получить установленный эквивалент javascript

#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:

Комментарии:

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 Моя жена говорит мне, что все, что я ношу, тоже вышло из моды. Если вы хотите дать ответ на этот вопрос, я проголосую за вас.