JavaScript中的类继承是通过原型链实现的。原型链是一种继承机制,它允许一个对象(称为子类)继承另一个对象(称为父类)的属性和方法。每个JavaScript对象都有一个指向另一个对象的指针,这个指针称为原型。通过这种机制,子类可以继承父类的属性和方法。
继承的实现方法
JavaScript中实现类继承的基本方法有两种:一种是通过原型链继承,另一种是通过对象冒充继承。
原型链继承
原型链继承是最常用的继承方式,它的实现方法是:子类的原型对象指向父类的实例,从而使子类可以继承父类的属性和方法。
// 定义父类 function Parent() { this.name = 'parent'; this.say = function() { console.log('I am ' + this.name); } } // 定义子类 function Child() { this.name = 'child'; } // 子类继承父类 Child.prototype = new Parent(); // 实例化子类 var child = new Child(); // 调用父类的方法 child.say(); // I am child
对象冒充继承
对象冒充继承是一种比较简单的继承方式,它的实现方法是:在子类构造函数中调用父类构造函数,从而使子类可以继承父类的属性和方法。
// 定义父类 function Parent() { this.name = 'parent'; this.say = function() { console.log('I am ' + this.name); } } // 定义子类 function Child() { Parent.call(this); this.name = 'child'; } // 实例化子类 var child = new Child(); // 调用父类的方法 child.say(); // I am child
优缺点
- 原型链继承的优点:
- 实现简单,继承关系易于理解。
- 可以实现多级继承。
- 子类可以重写父类的方法。
- 原型链继承的缺点:
- 每个子类实例都有父类实例的副本,占用内存。
- 子类实例无法向父类实例传参。
- 对象冒充继承的优点:
- 每个子类实例只有自己的属性,节省内存。
- 子类实例可以向父类实例传参。
- 对象冒充继承的缺点:
- 实现相对复杂,继承关系不易于理解。
- 只能实现单级继承,无法实现多级继承。
- 子类无法重写父类的方法。