Сравнение прототипов Javascript, не дающее ожидаемых результатов - PullRequest
0 голосов
/ 06 сентября 2018

Я пытался понять наследование прототипа javascript в Эта ссылка

Затем начали пробовать приведенные ниже эксперименты по присвоению прототипов для наследования,

function Person() {}
Person.prototype.dance = function() {};

function Employee() {}

function Student() {}

Employee.prototype = new Person();
Student.prototype = new Person();

emp = new Employee();
stu = new Student();

console.log("Person Object Equal : " + (new Person() == new Person()));
console.log("Emp and Stu Prototype Equal : " + (Employee.prototype == Student.prototype));
console.log("Emp and Stu Object Prototype Equal : " + (emp.prototype == stu.prototype));
console.log("Emp and Stu Object Equal : " + (emp == stu));

Если переменные класса Employee.prototype==Student.prototype возвращают false, тогда как переменные объекта emp.prototype==stu.prototype возвращает истину?

Я думал, что emp.prototype==stu.prototype также вернет false, поскольку они будут указывать на те же прототипы, что и его функции класса.

Может кто-нибудь объяснить, в чем именно заключается логика? Может быть, мне здесь не хватает какой-то точки ..?

Вы можете скопировать приведенный выше код и запустить его для тестирования по Same Link , указанному выше.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Причина, по которой третья проверка возвращает true, заключается просто в том, что stu.prototype и emp.prototype не определены. .prototype - это свойство, которое существует в функции конструктора; он не существует в объекте, созданном new в этом конструкторе.

emp имеет свойство emp.__proto__, но оно устарело, и вы не должны обращаться к нему напрямую. emp.__proto__ === Employee.prototype вернет истину. Непревзойденным подходом для доступа к прототипу будет Object.getPrototypeOf(emp), хотя даже у вас редко будет причина для его использования.

0 голосов
/ 06 сентября 2018

Я понимаю, что вы действительно хотите это:

function Person() {}
Person.prototype.dance = function() {};

function Employee() {}

function Student() {}

// Employee.prototype = new Person();
// Student.prototype = new Person();

const person = new Person();
Employee.prototype = person;
Student.prototype = person;


const emp = new Employee();
const stu = new Student();

console.log("Person Object Equal : " + (new Person() === new Person()));
console.log("Emp and Stu Prototype Equal : " + (Employee.prototype === Student.prototype));
console.log("Emp and Stu Object Prototype Equal : " + (emp.prototype === stu.prototype));
console.log("Emp and Stu Object Equal : " + (emp === stu));
...