资源描述:
《javascript的几种继承方法介绍_基础知识》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、javascript的几种继承方法介绍1.原型链继承:构造函数、原型和实例的关系:每个构造函数都自一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。确认原型和实例之间的关系用instanceofo原型链继承缺点:字面量重写原型会中断关系,使用引用类型的原型,并且了类型述无法给超类型传递参数functionParent(){this,name二'mike,;}functionChild(){this.age=12;}//儿子继承父亲(原型链)Child.prototype=ncwParent
2、();//Child继承Parent,通过原型形成链条vartest=newChild();console.log(test.age);console,log(test,name);〃得到被继承的属性〃孙子继续原型链继承儿子functionBrother(){this.weight二60;}Brother,prototype二newChildO;//继承原型链继承varbrother二newBrother();console,log(brother,name);//继承了Parent和Child,弹出mikeconsole.log
3、(brother・age);//12console,log(brotherinstanceofChild);//tureconsole,log(brotherinstanceofParent);//tureconsolc.1og(brothcrinstaneeofObject);//turc2•构造函数实现继承:乂叫伪造对象或经典继承。构造函数实现继承缺点:借用构造函数虽然解决了原型链继承的两种问题,但没有原型,则复用无从谈起,所以需耍原型链+借用构造函数模式。functionParcnt(age){this.name=[Jmik
4、e','jack,,'smith,];this.age=age;}functionChiId(age){Parent,call(this,age);〃把this指向Parent,同时还可以传递参数}vartest二newChild(21);console.log(test.age);//21console.log(test,name);test.name.pushCbill");console.log(test.name);//mike,jack,smith,bill3•组合继承:使用原型链实现对原型属性和方法的继承,而通过借用构
5、造函数来实现对实例属性的继承。这样即通过在原型上定义方法实现了函数复用,又保证每个实现都有它自己的屈性。缺点:无论什么情况下,都会调用两次超类型构造函数,一次是在创建了类型原型的时候,另一次是在创建子类型原型的吋候,另一次是在子类型构造函数内部。functionParcnt(age){this.name=["mike",'jack",'smith"];this.age=age;}Parent.prototype.run二function(){returnthis.name+"areboth,+this.age;}functionC
6、hild(age){Parent,call(this,age);//给超类型传参,第二次调用}Ch订d.prototype=ncwParent();//原型链继承,第一次调用vartestl=newCh订d(21);//写newParent(21)也行console,log(test1.run());//mike,jack,smithareboth21vartest2二newChild(22);console.Iog(tcst2.age);console.log(testl.age);console.Iog(test2.run()
7、);//这样可以使testl和test2分别拥有自己的属性age同时又可以有run方法4•原型式继承:借助原型可以基于已冇的对象创建新对象,同时还不必因此创建口定义类型。它要求必须有一个对象可以作为另一个对象的基础。functionobject(o){functionF(){};F.prototype=o;returnnewF();varperson={name:'nicho',friends:['shelT,'jim,,'lucy,]}varamothcrPcrson二object(pcrson);anotherPerson・n
8、ame='Greg';anotherPerson.friends.push('Rob');console,log(anotherPerson.friends);//[〃shell〃,〃lucy〃,〃Rob〃]varyctAnothcrPcrson二