js继承是怎么实现的

41次阅读
没有评论

JavaScript中的继承可以通过原型链实现,也可以使用ES6中新增的class语法糖来实现。

  1. 原型链继承

在JavaScript中,每个对象都有一个指向其原型对象的链接(也称为__proto__)。当在对象上访问一个属性时,如果该属性在对象上不存在,JavaScript引擎会自动查找原型链上的属性。因此,可以通过将一个对象的原型指向另一个对象来实现继承。

下面是一个使用原型链实现继承的简单示例:

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

Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
}

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

Dog.prototype = new Animal();

let dog = new Dog('Tom');
dog.sayName();  // 输出 "My name is Tom"

在上面的示例中,定义了一个Animal构造函数,它包含一个sayName方法。然后,通过将Dog的原型指向Animal的实例,实现了Dog继承自Animal。最后创建了一个Dog实例,并通过调用sayName方法来验证继承是否成功。

  1. class语法糖实现继承

ES6中引入了class语法糖,它提供了一种更直观的方式来定义类和继承关系。使用class语法糖可以更方便地实现继承。

下面是使用class语法糖实现继承的示例:

class Animal {
  constructor(name) {
    this.name = name;
  }

  sayName() {
    console.log('My name is ' + this.name);
  }
}

class Dog extends Animal {
  constructor(name) {
    super(name);
  }
}

let dog = new Dog('Tom');
dog.sayName();  // 输出 "My name is Tom"

在上面的示例中,使用class关键字定义了Animal和Dog两个类。通过使用extends关键字,Dog类继承自Animal类,并使用super关键字在构造函数中调用父类的构造函数。最后创建了一个Dog实例,并通过调用sayName方法来验证继承是否成功。

无论是使用原型链还是使用class语法糖实现继承,都需要注意继承链中各个构造函数的调用顺序,以及原型链上属性的查找顺序。

正文完
 
评论(没有评论)