Здравствуйте.
Допустим у нас есть собственный конструктор(пример из книги):
var Person = function (name) {
this.name = name;
this.say = function () {
return “I am “ + this.name;
};
};
далее автор размышляет:
Цитата:
|
В результате при каждом вызове конструктора new Person() в памяти будет
создаваться новая функция. Совершенно очевидно, что это неэкономный подход к расходованию памяти, потому что реализация метода say() не изменяется от одного экземпляра к другому. Эффективнее было бы добавить метод к прототипу функции Person:
Person.prototype.say = function () {
return “I am “ + this.name;
};
|
хорошо, а если мы используем ES6 синтаксис, будет ли данный код эквивалентен тому, что на ES5?
class Person {
constructor(name){
this.name = name;
}
say(){
return "I am " + this.name;
}
};
с одной стороны да, say(){} "пойдет" в прототип объекта, но с другой стороны, когда мы выполняем инструкцию
Person.prototype.say = function () {
return “I am “ + this.name;
};
то выполняем её один раз и далее "клепаем" объекты чколько угодно, имея в прототипе say(), в ES6 say() тоже пойдет в прототип, но будет писаться каждый раз - я правильно понимаю?
как на ES6 выполнить
Person.prototype.say = function () {
return “I am “ + this.name;
};
внутри самого класса?
например
console.clear();
class ProtoPerson {
constructor(){}
say(){
return "I am " + this.name;
};
};
class Person extends ProtoPerson {
constructor(name){
super();
this.name = name;
}
};
let pers = new Person("Luca");
console.log( pers.say() );
console.log(pers);