史上最全面的JavaScript继承方法推荐,你了解吗?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3850个文字,预计阅读时间需要16分钟。
前言:为家族分享JS中最常见且最详细的继承方式,以下将逐一面对几个维度进行展开说明。文章稍长,请耐心阅读,有任何错误理解的地方,欢迎留言指出。
生产原因:为了实现代码的复用,避免重复编写相同的功能。
代码实现:javascriptfunction Parent(name) { this.name=name;}
Parent.prototype.sayName=function() { console.log(this.name);};
function Child(name, age) { Parent.call(this, name); this.age=age;}
Child.prototype=new Parent();Child.prototype.constructor=Child;
Child.prototype.sayAge=function() { console.log(this.age);};
var child=new Child('Tom', 12);child.sayName(); // 输出:Tomchild.sayAge(); // 输出:12
基本原理:
1.构造函数继承:通过`Parent.call(this, name)`将父类构造函数的参数传递给子类,实现属性继承。
2.原型链继承:通过`Child.prototype=new Parent()`,将父类原型赋值给子类原型,实现方法继承。
3.组合继承:结合构造函数继承和原型链继承的优点,先通过`Parent.call(this, name)`实现属性继承,再通过`Child.prototype=new Parent()`实现方法继承。
优点:
1.代码复用。
2.属性和方法可以灵活扩展。
缺点:
1.如果父类原型有引用类型属性,子类实例之间会共享这个属性,容易导致修改一个实例的属性影响到其他实例。
2.组合继承在创建子类实例时,会调用两次父类构造函数,导致性能问题。
本文共计3850个文字,预计阅读时间需要16分钟。
前言:为家族分享JS中最常见且最详细的继承方式,以下将逐一面对几个维度进行展开说明。文章稍长,请耐心阅读,有任何错误理解的地方,欢迎留言指出。
生产原因:为了实现代码的复用,避免重复编写相同的功能。
代码实现:javascriptfunction Parent(name) { this.name=name;}
Parent.prototype.sayName=function() { console.log(this.name);};
function Child(name, age) { Parent.call(this, name); this.age=age;}
Child.prototype=new Parent();Child.prototype.constructor=Child;
Child.prototype.sayAge=function() { console.log(this.age);};
var child=new Child('Tom', 12);child.sayName(); // 输出:Tomchild.sayAge(); // 输出:12
基本原理:
1.构造函数继承:通过`Parent.call(this, name)`将父类构造函数的参数传递给子类,实现属性继承。
2.原型链继承:通过`Child.prototype=new Parent()`,将父类原型赋值给子类原型,实现方法继承。
3.组合继承:结合构造函数继承和原型链继承的优点,先通过`Parent.call(this, name)`实现属性继承,再通过`Child.prototype=new Parent()`实现方法继承。
优点:
1.代码复用。
2.属性和方法可以灵活扩展。
缺点:
1.如果父类原型有引用类型属性,子类实例之间会共享这个属性,容易导致修改一个实例的属性影响到其他实例。
2.组合继承在创建子类实例时,会调用两次父类构造函数,导致性能问题。

