dunmaksim
@dunmaksim
Быдлокодер

Как в JS определить свойство (property) класса?

Здравствуйте!

В JS имеется возможность расширять прототипы, например, так:
MyClass.prototype.show = function(){
  ... //Код метода, который будет доступен всем объектам, созданным с помощью new MyClass();
}

Кроме того, можно задавать свойства для объектов, например, так:
Object.defineProperty(myClassInstance, "content", {
    get: function(){
    ...  //Следует возвратить значение свойства "content" объекта myClassInstance
    },
    set: function(val){
    ... //Код, устанавливающий значение свойства "content" объекта myClassInstance
    }
});

Ограничение заключается в том, что нельзя свойства задавать для прототипов, т.е. такая конструкция НЕ работает:
function MyClass(properties){
    ... //Код конструктора
};

//Здесь же, чуть ниже попытаемся добавить свойство классу:
Object.defineProperty(MyClass, "content", {
    set: function(val){
    ...
    },
    get: function(val){
    ...
    }
});

И вот такая - тоже не работает:
Object.defineProperty(MyClass.prototype, "content", {
    set: function(val){
    ...
    },
    get: function(val){
    ...
    }
});

Хотя, может быть, кто-нибудь знает обходной манёвр, позвляющие добавить свойства в прототип?
  • Вопрос задан
  • 2467 просмотров
Решения вопроса 1
maxaon
@maxaon
Последний вариант работает, если его правильно написать.
function MyClass(properties) {
}
Object.defineProperty(MyClass.prototype, "content", {
  set: function (val) {
    this._val = val;
  },
  get: function () {
    return this._val;
  }
});
var inst = new MyClass()
inst.content = 12;
alert(inst.content);

Что у вас не работает?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
romanzhak
@romanzhak
Mathematician
var Class = function() {};
Class.prototype.p1 = 1;
Class.prototype.p2 = 1;
Class.prototype.p3 = 1;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы