js 原型继承关键字和示列详解
时间: 2023-05-25 12:05:10 浏览: 215
1. 原型
在 JavaScript 中,每个对象都有一个原型对象,原型对象是一个普通的对象,其中包含了一些属性和方法。当我们访问对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript 引擎会自动去该对象的原型对象中查找,如果原型对象中仍然没有,则会在原型对象的原型对象中查找,一直查找到 Object.prototype,最后如果还没有找到,则会返回 undefined 。
2. 继承
在 JavaScript 中,我们可以通过继承来实现代码复用和对象之间的关系。JavaScript 中的继承有两种方式:通过原型链继承和通过构造函数继承。
3. 原型继承
原型继承是指在 JavaScript 中通过设置对象的原型来实现继承的方式。具体的实现方式有很多种,其中一种比较常见的方式是使用 Object.create() 方法来创建一个新对象,并将原型指定为另一个对象。示例如下:
```
let animal = {
eat() {
console.log("eating");
}
};
let rabbit = Object.create(animal);
rabbit.eat(); // 输出 "eating"
```
在上面的示例中,我们首先定义了一个 animal 对象,它包含一个 eat() 方法。然后我们通过 Object.create() 方法创建了一个新对象 rabbit,并将其原型设置为 animal,这样就实现了 rabbit 对象从 animal 对象继承 eat() 方法的功能。我们可以通过调用 rabbit.eat() 来验证该方法确实存在于 rabbit 对象中。
4. 关键字
在 JavaScript 中,有一些关键字和函数可以用来实现原型继承。其中最常用的关键字是 extends 和 super。
extends 关键字可以用来继承一个类,示例如下:
```
class Animal {
eat() {
console.log("eating");
}
}
class Rabbit extends Animal {
run() {
console.log("running");
}
}
let rabbit = new Rabbit();
rabbit.eat(); // 输出 "eating"
rabbit.run(); // 输出 "running"
```
在这个示例中,我们首先定义了一个 Animal 类,并为其定义了一个 eat() 方法。然后我们定义了一个 Rabbit 类,该类使用 extends 关键字继承了 Animal 类,并为其定义了一个 run() 方法。我们通过实例化 Rabbit 类来创建一个 rabbit 对象,并通过调用 rabbit.eat() 和 rabbit.run() 来验证其继承效果。
super 函数用于在子类中调用父类的同名方法。示例如下:
```
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(this.name + " makes a noise.");
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
speak() {
console.log(this.name + " barks.");
}
}
let dog = new Dog("Rex");
dog.speak(); // 输出 "Rex barks."
```
在这个示例中,我们首先定义了一个 Animal 类,并为其定义了一个构造函数和一个 speak() 方法。然后我们定义了一个 Dog 类,该类继承了 Animal 类,并为其定义了一个构造函数和一个 speak() 方法。
在 Dog 类的构造函数中,我们调用了父类的构造函数,并传入了 name 参数。在 Dog 类的 speak() 方法中,我们使用 super 函数调用了父类的同名方法,并将其重写为输出“barks.”。我们通过实例化 Dog 类来创建一个 dog 对象,并通过调用 dog.speak() 来验证其继承效果。
总结
在 JavaScript 中,原型继承是一种非常重要的对象复用和代码组织方式。我们可以使用原型对象来实现原型继承,也可以使用关键字和函数来简化继承的过程。在实际开发中,我们需要根据具体的业务场景和需求来选择最合适的继承方式和实现方法。
阅读全文