当前位置:首页 > JavaScript

原生js如何实现继承

2026-03-01 15:59:57JavaScript

原型链继承

通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类的属性和方法,但所有子类实例共享父类引用类型属性,可能导致修改污染。

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

function Child() {}
Child.prototype = new Parent(); // 核心步骤

const child = new Child();
child.sayName(); // 输出 "parent"

构造函数继承

在子类构造函数中调用父类构造函数,使用callapply改变this指向。可解决引用属性共享问题,但无法继承父类原型上的方法。

function Parent(name) {
  this.name = name;
}

function Child(name) {
  Parent.call(this, name); // 核心步骤
}

const child = new Child('child');
console.log(child.name); // 输出 "child"

组合继承

结合原型链和构造函数继承,通过调用父类构造函数继承实例属性,通过原型链继承原型方法。但会调用两次父类构造函数。

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

function Child(name) {
  Parent.call(this, name); // 第一次调用
}
Child.prototype = new Parent(); // 第二次调用

const child = new Child('child');
child.sayName(); // 输出 "child"

寄生组合继承

优化版的组合继承,通过Object.create创建父类原型副本,避免重复调用父类构造函数。这是最理想的继承方式。

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

function Child(name) {
  Parent.call(this, name);
}
Child.prototype = Object.create(Parent.prototype); // 核心步骤
Child.prototype.constructor = Child; // 修复构造函数指向

const child = new Child('child');
child.sayName(); // 输出 "child"

ES5实现类语法糖

通过立即执行函数返回构造函数,模拟class的extend效果,底层仍使用寄生组合继承。

var Animal = (function() {
  function Animal(name) {
    this.name = name;
  }
  Animal.prototype.sayName = function() {
    console.log(this.name);
  };
  return Animal;
})();

var Dog = (function(_super) {
  function Dog(name) {
    _super.call(this, name);
  }
  Dog.prototype = Object.create(_super.prototype);
  Dog.prototype.constructor = Dog;

  Dog.prototype.bark = function() {
    console.log('Woof!');
  };
  return Dog;
})(Animal);

var dog = new Dog('Buddy');
dog.sayName(); // 输出 "Buddy"
dog.bark(); // 输出 "Woof!"

原生js如何实现继承

标签: 如何实现js
分享给朋友:

相关文章

vue如何实现重新实现主题

vue如何实现重新实现主题

动态主题切换的实现 在Vue中实现动态主题切换,通常需要结合CSS变量和状态管理。通过修改根元素的CSS变量值,可以全局改变应用的主题样式。 定义主题相关的CSS变量在根元素中: :root…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML…