Почему экземпляры объекта не показывают свойства своего Constructor.prototype, даже если они унаследованы в JS? - PullRequest
0 голосов
/ 11 июля 2020

У меня есть сомнения по поводу прототипов в JS. Это слишком запутанно. Я использую функцию конструктора под названием Human.

function Human(fname,lname){
    this.fname = fname;
    this.lname = lname; 
    this.fullname = function(){
         return this.fname + this.lname ;   
    }
}

Я создал с ней два объекта person1 и person2

var person1 = new Human('Barbara','Corcoran');
var person2 = new Human('Mark','Cuban');

Итак, я получаю, что person1 и person2 получат fname, lname и fullname в качестве его свойств, но если бы я сказал

Human.prototype.name = "Alfred";
Human.prototype.age = 28;

Здесь Human получает больше свойств, а именно - имя и возраст. Наследует ли person1 и person2 имя и возраст? Если да, то почему он не появляется, когда я консолью журнал person1 и person2? Если нет, то почему?

1 Ответ

2 голосов
/ 11 июля 2020

name и age существуют в прототипе person1 и person2, а не в своих собственных свойствах.

Наследование в JS реализовано с помощью цепочки прототипов.

Цепочка прототипов означает, что если вы получите доступ к свойствам name и age в person1 и person2, они попытаются найти свои собственные свойства. Однако, если у экземпляров нет этих свойств, они будут пытаться найти эти свойства в своем прототипе до вершины прототипа.

Обычно консоль не отображает свойства в цепочке прототипов. Если вы хотите проверить эти свойства, вы должны проверить свойства __proto__.

enter image description here

By the way, you might need this

Object.getPrototypeOf(person1)===person1.__proto__ //true

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...