手机版

浅谈Javascript的继承方法

时间:2021-09-09 来源:互联网 编辑:宝哥软件园 浏览:

S1:js中的一切都是一个对象。如果我们想继承父对象的属性和方法,我们首先会如何实现?考虑到原型的概念,我一开始是这样实现继承的

函数Parent(){ this . name=' 123 ';} parent . prototype . getname=function(){ return this . name;}函数Son(){ this . age=20;} son . prototype=new Parent();son . prototype . GetAge=function(){ return this . age;} var Son=new Son();console . log(' Name : ' son . getname()';age : ' son . GetAge());VM1777:16名称:123;年龄: 20从上面可以看出,父代的继承主要是为了覆盖子代的原型,从而将父代的属性和方法赋予子代的原型。这样,new Son()构造的对象将从原型[即Parent对象Parent]继承属性和方法,从而达到继承效果;但这会带来一个副作用,就是当父对象包含引用类型的属性时,子对象对引用类型数据的修改会影响到所有的子对象,这显然不是我们需要的效果。

函数Parent(){ this . name=' 123 ';this .水果=[' apple '];} parent . prototype . getname=function(){ return this . name;}函数Son(){ this . age=20;} son . prototype=new Parent();son . prototype . GetAge=function(){ return this . age;} var Son=new Son();var son1=new Son();console.log(son .水果);//['apple']console.log(son1 .水果);//['苹果']son .水果.推(梨);console.log(son .水果);//['苹果','梨']console.log(son1 .水果);//['苹果','梨']s :目前要解决的问题是让每个子对象都有一个父对象的属性副本,所以在修改属性时,它只修改子对象下的属性,而不影响其他子对象属性。这个目标的实现是通过参考前面模拟对象的方式来实现的

函数Parent(){ this . name=' 123 ';this .水果=[' apple '];} parent . prototype . getname=function(){ return this . name;}函数Son(){ Parent . call(this);this.age=20} son . prototype=new Parent();son . prototype . GetAge=function(){ return this . age;} var Son=new Son();var son1=new Son();console.log(son .水果);//['apple']console.log(son1 .水果);//['苹果']son .水果.推(梨);console.log(son .水果);//['苹果','梨']console.log(son1 .水果);//['apple']上面,我在Son函数中添加了Parent.call(this)。当实现new Son()时,这个[也就是新的Son对象]在Parent函数中假装上下文this来调用Parent()函数,所以我得到了父对象的属性和方法的副本。因此,当接下来修改父对象的属性和方法时,它实际上是一个修改过的副本,因此它不会影响所有子对象。但是由于使用了Son.prototype=new Parent(),我们得到了两个实例的属性和方法,得到副本后,我们只需要父对象的原型。从下面可以看出,我们在原型中只需要getname();

S3:下一步是移除实例的属性和方法。这时,是构造函数发挥作用的时候了。查看下面的代码,将Parent.prototype重新构建为一个本机对象,作为子对象的原型,然后将构造函数指向子构造函数。

函数Parent(){ this . name=' 123 ';this .水果=[' apple '];} parent . prototype . getname=function(){ return this . name;}函数Son(){ Parent . call(this);this.age=20}函数Extend(Parent,Son){ var proto=new Object(Parent . prototype);原型构造函数=SonSon.prototype=proto}扩展(父母、儿子);son . prototype . GetAge=function(){ return this . age;}

以上就是本文的全部内容,希望大家喜欢。

版权声明:浅谈Javascript的继承方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。