javascript - JavaScript 解释中的原型(prototype)可重用性

标签 javascript jquery

通过浏览多个网站教程,我有点困惑,现在找不到以下两个语句之间的区别; (假设 Person 是 Employee 的父类(super class)/函数)

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

据我所知,第一行显示 Employee REFERENCE 指向 Person 构造函数。 Person的构造函数是通过Object.create()创建的。 第二个只是创建了一个 Employee 构造函数。

请告诉我,作为一名 java 程序员,我是否发现 javascript 令人困惑。

最佳答案

javascript中的原型(prototype)就像java中的类。所以代码:

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

意思是:

class Employee inherits new Person() { // meaning of first line
    Employee constructor = Employee    // meaning of second line
}

在经典的 javascript 中,没有类,而是有构造函数。构造函数只是一个常规函数,您可以通过 new myFunction() 而不是 myFunction() 调用。

在 javascript 中,原型(prototype)(类类对象)不是属于类的构造函数,而是构造函数的属性。是的,函数就像 JavaScript 中的任何其他事物一样是对象,因此它们可以像任何其他对象一样具有属性。

此外,在 javascript 构造函数中不能继承构造函数(别傻了 :D )。相反,构造函数从对象继承(严格来说,对象从对象继承,因为继承是在调用构造函数时发生的)。这就是为什么我们创建父类(super class)对象的实例 - 使其成为一个对象,以便我们可以继承。

从技术上讲,Employee.prototype.constructor行并不是必需的。第一行是设置继承所需的全部内容。

关于javascript - JavaScript 解释中的原型(prototype)可重用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38969183/

相关文章:

javascript - 如何在 Angular 2 组件中单击时更改 bool 值

javascript - 单击网格中的单元格时如何获取单元格的列标题和行的第一个 td?

jquery - 如何从 KendoGrid 获取所有列名称?

javascript - 当我启用 CSS 动画时,jQuery hide().slideDown() 不起作用

javascript - 什么会导致 Bootstrap 在我的文档中插入额外的元素?

javascript - 向 JSON 字符串添加新属性

javascript - div 圆 Angular 形式

javascript - AngularJS ng-repeat - 无法获取模块或 Controller

javascript - 如何修复 jslint 错误 'Don' t make functions within a loop.'?

javascript - 在自定义html视频播放列表上播放YouTube视频