javascript - 继承类的原型(prototype)对象如何等于 JavaScript 中原始类的新实例?

标签 javascript inheritance prototype proto

我一直在学习 JavaScript 中的继承,无法理解 https://www.tutorialsteacher.com/javascript/inheritance-in-javascript 教程中的一行代码.

代码如下:

function Person(firstName, lastName) {
    this.FirstName = firstName || "unknown";
    this.LastName = lastName || "unknown";            
}

Person.prototype.getFullName = function () {
    return this.FirstName + " " + this.LastName;
}
function Student(firstName, lastName, schoolName, grade)
{
    Person.call(this, firstName, lastName);

    this.SchoolName = schoolName || "unknown";
    this.Grade = grade || 0;
}
//Student.prototype = Person.prototype;
Student.prototype = new Person();
Student.prototype.constructor = Student;

var std = new Student("James","Bond", "XYZ", 10);

alert(std.getFullName()); // James Bond
alert(std instanceof Student); // true
alert(std instanceof Person); // true

我不明白的部分是注释行之后的行,即:
Student.prototype = new Person();

据我了解,创建对象实例时,它的 __proto__属性指向类的原型(prototype)对象。

按照这个逻辑,代码不应该是:
Student.prototype = new Person().__proto__; ?

我真的很感激一些澄清!

最佳答案

有功能上的区别。您的方式将 Student 的原型(prototype)分配为对 Person 的引用。任何一个原型(prototype)的突变都会发生在两者中。相反,当您在示例中分配时,您传递的是 new Object带有 Person 原型(prototype)的(深层)副本。看看下面的截图。

Question's method
Example's method

关于javascript - 继承类的原型(prototype)对象如何等于 JavaScript 中原始类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62241162/

相关文章:

Javascript - 循环在执行模拟时无法正常工作

javascript - jQuery 链接而不是按钮触发

javascript - 在左侧边栏菜单中,一次只能打开一个模块

javascript - iframe 可以检查自己是否在视口(viewport)中吗?

javascript - Select2 for AngularJS 中的两种数据绑定(bind)不起作用

c# - 从子类调用父类构造函数的正确方法

c++ - 什么是私有(private)继承,它解决了哪些问题?

javascript - ES6 - 使用 import 语句在类上声明原型(prototype)方法

scala - 推断抽象类中的多个泛型类型,这些类型应该可供编译器使用

javascript - 在对象实例化期间扩展 javascript 对象