Скажите, а в чем разница?
Sunny.prototype = Object.create(Person.prototype);
от
Sunny.prototype = Person.prototype;
Оба варианта работают одинаково при выводе
Внимательно перечитал вроде как и вот через консоль решил поиграться с деревом, что на что ссылается.
Объект можно создать так:
[PHPHTML]
Teacher.prototype = Object.create( Person.prototype );
Teacher.prototype = new Person();
Teacher.prototype = { __proto__: Person.prototype };
Object.setPrototypeOf(Teacher.prototype, Person.prototype);
class Teacher extends Person {};
[/PHPHTML]
Вроде как все объявления работают одинаково как я понял, не важно как объявишь.
Правильно я понимаю картину?Возьмем этот код:
function Person(name) {
this.name = name
}
Person.prototype.output = function(){
console.log(this.name)
}
function Teacher(name, skill) {
Person.apply(this, [name])
this.skill = skill
}
Teacher.prototype = Object.create(Person.prototype)
Teacher.prototype.constructor = Teacher
Teacher.prototype.output = function(){
console.log(this.name, this.skill)
}
var t = new Teacher("john", "super man")
console.log(t.constructor.name)
t.output();
Когда мы объявили функцию любую у него автоматом создался
prototype, скрытое свойство, зарезервированное самим движком
JS. В данном коде когда мы написали
function Teacher просто в коде, автоматом в скрытом свойстве [[prototype]] движка JS появилось Teacher.prototype. Когда я создал
объект t
t.__proto__ == Teacher.prototype
Далее ссылка на родителя идет тоже через прото
Teacher.prototype.__proto__ == Person.prototype
А дальше
Person.prototype.__proto__ == Object.prototype
И далее
Object.prototype.__proto__ == null
И на этом конец?