Подтвердить что ты не робот

В чем разница между функцией определения прототипом и свойством класса?

Следуйте моему коду,
Apple определяет функцию прототипом.
Банана определяет функцию по свойству класса.

var Apple = function(){}
Apple.prototype.say = function(){
    console.debug('HelloWorld');
}
var Banana = function(){
    this.say = function(){
        console.debug('HelloWorld');
    }
}

var a = new Apple();
var b = new Banana();

a.say();
b.say();

Являются ли эти различия?

4b9b3361

Ответ 1

Когда вы создаете несколько экземпляров Apple, у вас будет только один экземпляр say() в памяти. Однако, когда вы создаете несколько экземпляров банана, вы создадите множество экземпляров функции say().

Вот почему прототипы сохраняют память. Вы также избегаете стоимости обработки для создания и назначения функции say().

Кроме того, если вы измените свойства родительского объекта, если дочерний элемент не заменит это свойство, изменения будут видны из дочернего элемента.

Ответ 2

Элементы прототипа подобны членам класса membeprototype, как член класса, тогда как u определяет его другим способом, а не членом класса. Поэтому, если вы создаете много объектов Apple, все будут использовать одну и ту же функцию, тогда как в случае банана каждый объект будет иметь свою собственную копию функции.  Подумайте, что прототип в javascript статичен в С#.