Делают ли экземпляры классов JavaScript функции клонирования?

Если у меня есть следующий код:

function myClass(){
    this.type = 1;
    this.ret = function(){
        return this.type;
    }
}

var ins1 = new myClass,
    ins2 = new myClass,
    ins3 = new myClass;

ins2.type = 2;
ins3.type = 3;

console.log(ins1.ret() + ' - ' + ins2.ret() + ' - ' + ins3.ret());

Вывод в консоли

1 - 2 - 3

Когда код запускается (console.log() часть), есть ли один метод ret() работает или три? Если каждый экземпляр создает новый метод, как я могу избежать этого? Если они все делают одно и то же, зачем их трое.

1 ответ

Решение

Методы действительно разные. Вы тратите память.

ins1.ret == ins2.ret; // false

Вместо этого вы можете определить метод в прототипе:

function myClass(){}
myClass.prototype.type = 1;
myClass.prototype.ret = function(){
  return this.type;
};
Другие вопросы по тегам