Показать сообщение отдельно
  #10 (permalink)  
Старый 25.01.2021, 22:41
Аспирант
Отправить личное сообщение для denis_alekss Посмотреть профиль Найти все сообщения от denis_alekss
 
Регистрация: 01.12.2020
Сообщений: 55

Скажите, а в чем разница?

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

И на этом конец?

Последний раз редактировалось denis_alekss, 25.01.2021 в 23:56.
Ответить с цитированием