В чем различие этих 2 способов прототипного наследования и какой из них более правильнее использовать?
function Cat() {
this.__proto__.type = 'кот';
}
var cat = new Cat();
console.log(cat.type); // кот
function CatTwo() {
}
CatTwo.prototype.type = 'тоже кот';
var catTwo = new Cat();
console.log(catTwo.type); // тоже кот
Ответ
На самом деле в примере в вопросе нет наследования.
__proto__ до недавнего времени не был стандартизирован.
В последних спецификациях можно найти, что getter __proto__, обертка над вызовом внутренней функции [[GetPrototypeOf]]
Точно такая же, как и функция Object.getPrototypeOf
Если применительно к приведенному коду:
в первом случае значение прототипа меняется каждый раз при создании объекта, во втором - устанавливается всего один раз.
Отсюда можно сделать вывод, что если есть доступ к конструктору, прототип лучше менять непосредственное у него.
Пример, когда приведенный код выдаст разные значения:
function Cat(type) {
this.__proto__.type = type;
}
var cat = new Cat('кот');
console.log(cat.type); // кот
var cat2 = new Cat('кот2');
console.log(cat.type); // кот2
console.log(cat2.type); // кот2
function CatTwo() {}
CatTwo.prototype.type = 'тоже кот';
var catTwo = new CatTwo();
console.log(catTwo.type); // тоже кот
Комментариев нет:
Отправить комментарий