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){
    ...
    }
});

Хотя, может быть, кто-нибудь знает обходной манёвр, позвляющие добавить свойства в прототип?
  • Вопрос задан
  • 2814 просмотров
Решения вопроса 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;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
24 нояб. 2024, в 14:37
3000 руб./в час
24 нояб. 2024, в 13:04
500 руб./в час
24 нояб. 2024, в 12:29
3000 руб./за проект