0

Добрый день, объясните пожалуйста почему я не могу создать метод sum в конструкторе Constructor с помощью другого метода addMethod.

var Constructor = function () {

    this.addMethod = function (name, func) {
       this.name = func;
    }

};

var obj = new Constructor;

obj.addMethod('sum', function (a, b) {
    return a + b;
});
  • хотя бы потому, что ты не добавил метод addMethod, ты объявил локальную функцию, которая не видна извне – Grundy Jun 29 '17 at 08:55
  • а как вообще должна работать addMethod? Как ты хочешь вызывать метод sum? он должен добавиться у конкретного объекта obj? – Grundy Jun 29 '17 at 08:56
  • Да поправил, благодарю. Я бы хотел, чтобы все объекты типа Constructor имели метод sum. – Kojer Defor Jun 29 '17 at 09:00
  • Я бы хотел, чтобы все объекты типа Constructor имели метод sum - тогда ты принял неверный ответ, и решение у тебя так же неверное: ты добавляешь метод только в текущий объект, все остальные экземпляры будут без этого метода – Grundy Jun 29 '17 at 09:16

1 Answers1

3

Потому что синтаксис не правильный. Нужно использовать this, и вычисляемые свойства для объекта оборачиваются в [] Правильно вот так:

var Constructor = function () {
  this.addMethod = function(name, func) {
    this[name] = func;
  }
};

var obj = new Constructor;

obj.addMethod('sum', function (a, b) { return a + b; });

console.log(obj.sum(2,2));

Darth
  • 13,217
Spaider
  • 116