В чем разница между функцией определения прототипом и свойством класса?
Следуйте моему коду,
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();
Являются ли эти различия?
Ответы
Ответ 1
Когда вы создаете несколько экземпляров Apple, у вас будет только один экземпляр say()
в памяти. Однако, когда вы создаете несколько экземпляров банана, вы создадите множество экземпляров функции say()
.
Вот почему прототипы сохраняют память. Вы также избегаете стоимости обработки для создания и назначения функции say()
.
Кроме того, если вы измените свойства родительского объекта, если дочерний элемент не заменит это свойство, изменения будут видны из дочернего элемента.
Ответ 2
Элементы прототипа подобны членам класса membeprototype, как член класса, тогда как u определяет его другим способом, а не членом класса. Поэтому, если вы создаете много объектов Apple, все будут использовать одну и ту же функцию, тогда как в случае банана каждый объект будет иметь свою собственную копию функции.
Подумайте, что прототип в javascript статичен в С#.