javascript是如何实现继承的,javascript实现继承的方式有什么
本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。
1、原型链继承
这个继承是最简单的。它的实现原理是每个AO对象都有一个原型,这个原型返回对象类型的原型的引用。所以可以给它赋一个对象,就可以实现简单的原型链继承。
函数Animal(){ this.eat=function(){
alert(‘我要吃’);
}
} function Bird(){ this . fly=function(){
alert(‘我会飞’);
}
}
//将Bird类的原型设置为动物对象。
Bird.prototype=新动物();var鸽子=新鸟();
pigeon . fly();
pigeon . eat();
因此,鸟类继承了动物能吃的特性。打印console.info(鸽子),我们可以看到:
当前对象的__proto__属性是一个动物对象,eat方法在这个动物对象中,也就是它的父类。如果在当前对象中找不到属性或方法,将根据原型链一步一步找到。
这里Bird的父类是Animal,Animal的父类是Object,或者所有没有直接指定原型的对象都是Object。因为toString()方法在Object中,所以所有对象都可以调用它。对象的父类为空。
另外需要注意的是,在原型链继承中,所有子类的父类对象都是相同的。只要任何子类改变了父类对象的属性,所有对象都会受到影响。这可能是缺点,也可能是优点。
注意:原型和_ _原型_ _的区别可以在我的另一个博客http://www.cnblogs.com/shamoyuu/p/prototype.html.中找到
2、原型冒充继承
原型模拟的原理是:取父类的构造函数,再执行一次。看看下面的代码:
函数Animal(){ this.eat=function(){
alert(‘我要吃’);
}
}函数Bird(){ Animal.apply(this,arguments);this.fly=function(){
alert(‘我会飞’);
}
}var鸽子=新鸟();
pigeon . fly();
pigeon . eat();
效果同上,只是这次eat方法不再是在原型链上,而是在鸽子对象上。
3、复制继承
复制继承的原理是复制父类的所有属性和方法。看看下面的代码。
函数Animal(){ this.eat=function(){
alert(‘我要吃’);
}
} function Bird(){ this . fly=function(){
alert(‘我会飞’);
}//在这里写一个继承的方法,复制所有父类的属性或方法。
this . extend=function(parent){ for(parent中的var key){ this[key]=parent[key];
}
}
}var鸽子=新鸟();//执行继承的方法pigeon . extend(new Animal());
pigeon . fly();
pigeon . eat();
这个和上面的一样。
4、ES6标准类的继承
ES6引入了类的概念。新类可以帮助我们编写更好、更直观的面向对象代码。
下面是ES6中类的继承,效果同上。
动物类{
构造函数(名称){ this.name=nameThis.type= animal
}
说(说){
console . info(this . type [ this . name ] say say );
}
}
Let dog=新动物(‘狗’);
狗说(‘汪汪汪’);
类鸟延伸动物{
构造者(姓名){
超级(名);This.type= bird
}
}
让鸽子=新鸟(‘鸽子’);
鸽子说(“我是一只鸟”);
实现非常简单直观,不再称之为“模拟继承”。
扩展资料
原型链继承利弊
1.只有单一继承。2.继承将影响所有对象。3.速度稍微慢一点。
原型冒充继承利弊
1.虽然可以继承更多,但是不能在运行时动态继承。您只能修改父类的构造函数。
复制继承(非ES6推荐)
因为很好的避免了以上两个缺点,所以可以实现多重继承,继承只影响当前对象,而且速度快,不需要修改父类的构造函数等。所以是最推荐的继承方式。
注意:jQuery的继承也是通过复制继承来实现的,只是jQuery增加了很多验证判断,但原理是一样的。
ES6标准类的继承
如果能使用ES6的最新特性,这种继承是最好的,容易理解,是标准面向对象语言继承的应有方式。
但是请注意:
在构造器子类中,“this”必须放在super()调用之后。
必须在子类的构造函数中调用Super(),或者必须显式返回一个对象
无法继承更多。
- Java在继承时会自动生成一个父类对象,但在js中不会。
【推荐学习:javascript高级教程】以上是JavaScript如何继承的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。