js的继承有那些,并说出原理! 关键字:原型继承 借用构造函数继承 class继承
时间: 2024-05-21 08:12:00 浏览: 12
可以通过原型继承、借用构造函数继承和 class 继承实现 JavaScript 的继承。其中原型继承是通过将一个对象的原型指向另一个对象来实现继承。借用构造函数继承则是通过在子类的构造函数中调用父类的构造函数来实现。而 class 继承是 ES6 中新增的一种继承方式,通过使用 extends 关键字来实现继承。在 class 继承中,子类会继承父类的方法和属性,并且可以通过 super 关键字来调用父类的构造函数和方法。
相关问题
js的继承有那些,并说出原理! 携带关键字:原型继承 借用构造函数继承 class继承
可以,关于继承的问题,目前有三种方式:原型继承、借用构造函数继承和class继承。 原型继承是通过原型链来实现的,每个对象都有一个原型对象,通过原型链可以访问到其原型对象的属性和方法。借用构造函数继承是通过在子类构造函数中调用父类的构造函数来实现的,从而继承父类的属性和方法。class继承是ES6新增的一种继承方式,通过class关键字来定义类,并使用extends关键字来继承父类的属性和方法。
构造函数继承和原型继承
构造函数继承和原型继承都是 JavaScript 中实现继承的方式,但它们的实现方式不同。
构造函数继承是指在子类的构造函数中调用父类的构造函数来继承父类的属性和方法。这种方式的优点是可以传递参数,可以继承私有属性和方法,但缺点是无法继承父类原型上的方法。
原型继承是指让子类的原型对象指向父类的实例,从而继承父类的属性和方法。这种方式的优点是可以继承父类原型上的方法,但缺点是无法传递参数,无法继承私有属性和方法。
例如,以下是构造函数继承和原型继承的示例代码:
构造函数继承:
```js
function Parent(name) {
this.name = name;
}
Parent.prototype.sayHello = function() {
console.log('Hello, ' + this.name);
}
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
let child = new Child('Tom', 10);
console.log(child.name); // Tom
console.log(child.age); // 10
child.sayHello(); // TypeError: child.sayHello is not a function
```
原型继承:
```js
function Parent(name) {
this.name = name;
}
Parent.prototype.sayHello = function() {
console.log('Hello, ' + this.name);
}
function Child(name, age) {
this.age = age;
}
Child.prototype = new Parent('Bob');
let child = new Child('Tom', 10);
console.log(child.name); // Tom
console.log(child.age); // 10
child.sayHello(); // Hello, Tom
```