JavaScript对象的几种继承方式及优缺点?
时间: 2023-12-25 15:05:14 浏览: 82
JavaScript中实现继承的方式有以下几种:
1. 原型链继承
优点:简单方便,易于理解和实现。
缺点:父类的引用属性会被多个实例共享,可能会出现意外修改;子类无法向父类构造函数传递参数。
示例代码:
```javascript
function Animal() {
this.species = 'animal';
}
function Cat() {}
Cat.prototype = new Animal();
```
2. 借用构造函数继承
优点:可以在子类构造函数中向父类构造函数传递参数;解决了父类引用属性被多个实例共享的问题。
缺点:无法实现函数的复用。
示例代码:
```javascript
function Animal(name) {
this.name = name;
}
function Cat(name) {
Animal.call(this, name);
}
```
3. 组合继承
优点:综合了原型链继承和借用构造函数继承的优点,既可以实现函数的复用,又可以向父类构造函数传递参数。
缺点:父类构造函数会被调用两次,造成了一些不必要的消耗。
示例代码:
```javascript
function Animal(name) {
this.name = name;
}
Animal.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
function Cat(name) {
Animal.call(this, name);
}
Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;
```
4. 原型式继承
优点:简单方便,可以在不必创建构造函数的情况下实现继承。
缺点:引用属性会被共享,可能会造成意外修改。
示例代码:
```javascript
function createObject(obj) {
function F() {}
F.prototype = obj;
return new F();
}
var animal = { species: 'animal' };
var cat = createObject(animal);
```
5. 寄生式继承
优点:可以在不必创建构造函数的情况下实现继承,可以为对象添加专门的方法。
缺点:引用属性会被共享,可能会造成意外修改。
示例代码:
```javascript
function createObject(obj) {
var clone = Object.create(obj);
clone.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
return clone;
}
var animal = { species: 'animal' };
var cat = createObject(animal);
```
总体来说,不同的继承方式各有优缺点,应根据具体的需求来选择合适的方式。
阅读全文