带你读《现代Javascript高级教程》七、原型和原型链(4)

简介: 带你读《现代Javascript高级教程》七、原型和原型链(4)

带你读《现代Javascript高级教程》七、原型和原型链(3)https://developer.aliyun.com/article/1349648?groupCode=tech_library


4.原型继承

原型继承是一种通过继承原型对象来创建新对象的方式。在 JavaScript 中,我们可以使用多种方式实现原型继承。原型继承的概念是通过将一个对象作为另一个对象的原型来实现继承,从而使新对象可以共享原型对象的属性和方法。

 

1) 对象字面量和 Object.create():可以使用字面量对象定义属性和方法,并使用 Object.create() 方法创建一个新对象,并将其原型设置为现有对象的原型。

 

var parent = {
  name: "Parent",
  sayHello: function() {
    console.log("Hello, I am " + this.name);
  }};
var child = Object.create(parent);
child.name = "Child";

 

2) 构造函数和 Object.create():可以使用构造函数定义对象,并通过 Object.create() 方法将新对象的原型连接到现有对象的原型上。

 

function Parent(name) {
  this.name = name;}
Parent.prototype.sayHello = function() {
  console.log("Hello, I am " + this.name);};
function Child(name) {
  Parent.call(this, name);}
Child.prototype = Object.create(Parent.prototype);Child.prototype.constructor = Child;
var child = new Child("Child");

 

  1. 构造函数和 new 关键字:可以使用构造函数创建对象实例,并使用 new 关键字进行实例化。

 

function Parent(name) {
  this.name = name;}
Parent.prototype.sayHello = function() {
  console.log("Hello, I am " + this.name);};
function Child(name) {
  Parent.call(this, name);}
Child.prototype = new Parent();Child.prototype.constructor = Child;
var child = new Child("Child");

 

  1. 寄生组合继承

寄生组合继承是一种常用的原型继承方式,结合了构造函数继承和原型链继承的优点,避免了原型链中不必要的属性复制和方法重复定义的问题。这种方式先通过构造函数继承属性,然后通过设置原型链继承方法。

 

function Parent(name) {
  this.name = name;}
Parent.prototype.sayHello = function() {
  console.log("Hello, I am " + this.name);};
function Child(name, age) {
  Parent.call(this, name);
  this.age = age;}
Child.prototype = Object.create(Parent.prototype);Child.prototype.constructor = Child;
var child = new Child("Child", 10);

 

以上是常用的原型继承实现方式,每种方式都有其特点和适用场景。根据具体的需求和代码结构,可以选择最适合的方式来实现原型继承。

 

 

  1. 参考资料
  • MDN Web Docs - Object.create()open in new window
  • MDN Web Docs - Inheritance and the prototype chainopen in new window
  • JavaScript.info - Prototypal Inheritanceopen in new window
  • Eloquent JavaScript - Object-Oriented Programming
相关文章
|
17天前
|
JavaScript 前端开发
如何在JavaScript中实现基于原型的继承机制
【8月更文挑战第14天】如何在JavaScript中实现基于原型的继承机制
22 0
|
2月前
|
JavaScript
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
97 0
|
4天前
|
JavaScript NoSQL 前端开发
|
16天前
|
JavaScript 前端开发
JavaScript中什么是原型?有什么用?
JavaScript中什么是原型?有什么用?
11 1
|
29天前
|
JavaScript 前端开发 Java
什么是JavaScript原型对象
【8月更文挑战第2天】什么是JavaScript原型对象
42 9
|
8天前
|
JavaScript 前端开发 开发者
揭开JavaScript的神秘面纱:原型链背后隐藏的继承秘密
【8月更文挑战第23天】原型链是JavaScript面向对象编程的核心特性,它使对象能继承另一个对象的属性和方法。每个对象内部都有一个[[Prototype]]属性指向其原型对象,形成链式结构。访问对象属性时,若当前对象不存在该属性,则沿原型链向上查找。
17 0
|
24天前
|
设计模式 JavaScript 前端开发
js对原型和继承的理解
了解JavaScript中原型和继承的概念对于编写优雅高效的代码、理解库和框架的内部机制以及执行高级设计模式都有着重要的意义。
33 0
|
28天前
|
JavaScript 前端开发
详细讲解!JavaScript原型 !
详细讲解!JavaScript原型 !
|
2月前
|
JSON JavaScript 数据格式
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
218 3
|
2月前
|
JavaScript C++
js【详解】原型 vs 原型链
js【详解】原型 vs 原型链
26 0