JavaScript继承
程序员文章站
2022-06-15 13:41:01
...
一、概述
JavaScript中,继承是基于原型链的,本文简单归纳几种继承方法。以以下Animal、Cat分别为父、子构造函数。
function Animal(物种){
this.物种=物种;
}
Animal.prototype={
run:function(){
console.log("动物跑")
}
}
function Cat(name){
this.name=name
}
Cat.prototype.say=function(){
console.log("喵");
}
二、构造函数的继承
如果只需要实现构造函数的继承,可以直接在子构造函数中引用父构造函数。
function Cat(name){
Animal.call(this,"猫");
this.name=name;
}
var cat1=new Cat("小白");
console.log(cat1.物种);//"猫"
console.log(cat1.run());//error,因为未继承Animal的prototype.
三、prototype的继承
实现prototype的继承,只需要使Cat.prototype.__proto__=Animal.prototype,但是由于__proto__不被推荐,且兼容性也不行(IE11以上),我们可以使用:
-
Cat.prototype=Object.create(Animal.prototype)
Object.create()兼容IE9以上,注意此法会清空Cat.prototype,此法可与构造函数的继承配合使用。 -
Cat.prototype=new Animal("猫")
注意,此法会使Cat.prototype中有Animal构造函数运行后的属性、方法,属性方法嵌套层次较深,建议使用下一种方法。
FakeAnimal=function(){};
FakeAnimal.prototype=Animal.prototype;
Cat.prototype=new FakeAnimal();
此处以空构造函数为中介,Cat.prototype中不会有Animal构造函数运行后的属性、方法,此法也会清空原来的Cat.prototype,此法可与构造函数的继承配合使用。
四、总结
JavaScript继承当然不止这几种方法,这里只是简单介绍了几种基础方法便于自己掌握。