当前位置:首页 > JavaScript

js实现js继承

2026-01-31 12:34:24JavaScript

原型链继承

通过让子类的原型对象指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。

function Parent() {
  this.name = 'parent';
}
Parent.prototype.say = function() {
  console.log(this.name);
};

function Child() {}
Child.prototype = new Parent();

const child = new Child();
child.say(); // 'parent'

构造函数继承

在子类构造函数中调用父类构造函数,使用call/apply方法改变this指向。只能继承父类实例属性,无法继承原型方法。

function Parent(name) {
  this.name = name;
}
Parent.prototype.say = function() {
  console.log(this.name);
};

function Child(name) {
  Parent.call(this, name);
}

const child = new Child('child');
console.log(child.name); // 'child'
child.say(); // TypeError

组合继承

结合原型链继承和构造函数继承。通过构造函数继承实例属性,通过原型链继承原型方法。

js实现js继承

function Parent(name) {
  this.name = name;
}
Parent.prototype.say = function() {
  console.log(this.name);
};

function Child(name) {
  Parent.call(this, name);
}
Child.prototype = new Parent();

const child = new Child('child');
child.say(); // 'child'

原型式继承

基于已有对象创建新对象,使用Object.create()方法实现。新对象原型指向传入对象。

const parent = {
  name: 'parent',
  say: function() {
    console.log(this.name);
  }
};

const child = Object.create(parent);
child.name = 'child';
child.say(); // 'child'

寄生式继承

在原型式继承基础上增强对象,添加额外方法。适用于主要关注对象而非自定义类型的情况。

js实现js继承

function createAnother(original) {
  const clone = Object.create(original);
  clone.sayHi = function() {
    console.log('hi');
  };
  return clone;
}

const parent = { name: 'parent' };
const child = createAnother(parent);
child.sayHi(); // 'hi'

寄生组合式继承

最理想的继承方式。通过借用构造函数继承属性,通过混合式原型链继承方法。

function inheritPrototype(child, parent) {
  const prototype = Object.create(parent.prototype);
  prototype.constructor = child;
  child.prototype = prototype;
}

function Parent(name) {
  this.name = name;
}
Parent.prototype.say = function() {
  console.log(this.name);
};

function Child(name) {
  Parent.call(this, name);
}
inheritPrototype(Child, Parent);

const child = new Child('child');
child.say(); // 'child'

ES6类继承

使用class和extends关键字实现继承,语法更简洁。本质上仍是基于原型的继承。

class Parent {
  constructor(name) {
    this.name = name;
  }
  say() {
    console.log(this.name);
  }
}

class Child extends Parent {
  constructor(name) {
    super(name);
  }
}

const child = new Child('child');
child.say(); // 'child'

标签: js
分享给朋友:

相关文章

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js 实现滚动

js 实现滚动

实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

实现图片旋转js

实现图片旋转js

使用CSS transform属性旋转图片 通过CSS的transform属性可以轻松实现图片旋转。以下是一个简单的示例代码: const image = document.getElement…

js实现筛选

js实现筛选

JavaScript 实现数据筛选的方法 使用 Array.filter() 方法 Array.filter() 是 JavaScript 中最常用的筛选方法,它会创建一个新数组,包含通过回调函数测试…

vue js实现登录

vue js实现登录

Vue.js 登录功能实现 依赖安装 确保项目已安装 Vue.js 和必要的依赖库(如 Vue Router、Axios)。通过以下命令安装: npm install vue-router axio…