欢迎来到天天文库
浏览记录
ID:27820326
大小:103.76 KB
页数:14页
时间:2018-12-06
《javascript程序中实现继承特性的方式总结》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、JavaScript程序中实现继承特性的方式总结JavaScript是一门强行声称面向对象的语言,而继承是面向对象的一大主要特性,这里我们根据阮一峰老师的文章来看一下JavaScript程序中实现继承特性的方式总结概述JavaScript的所有对象,都有自己的继承链。也就是说,每个对象都继承另一个对象,该对象称为“原型”(prototype)对象。只有null除外,它没有自己的原型对象。原型对象的重要性在于,如果A对象是B对象的原型,那么B对象可以拿到A对象的所有属性和方法。Object.getPrototypof方法用于获取当前对象的原型对象。varp=O
2、bject.getPrototypeOf(obj):上面代码中,对象P就是对象obj的原型对象。Object,create方法用于生成一个新的对象,继承指定对象。varobj=0bject.create(p);上面代码中,新生成的obj对象的原型就是对象p。非标准的_口〖010_属性(前后各两个下划线),可以改写某个对象的原型对象。但是,应该尽量少用这个属性,而是用Object.getPrototypeofO和Object.setPrototypeOfO,进行原型对象的读写操作。varobj={};varp={}:obj.__proto_=p;Object,
3、getPrototypeOf(obj)===p//true上面代码通过_proto_属性,将p对象设为obj对象的原型。下面是一个实际的例子。vara={x:1};varb={__proto_:a};b.x//l上面代码中,b对象通过_proto_属性,将自己的原型对象设为a对象,因此b对象可以拿到a对象的所有属性和方法。b对象本身并没有x属性,但是JavaScript引擎通过__proto_属性,找到它的原型对象a,然后读取a的x属性。new命令通过构造函数新建实例对象,实质就是将实例对象的原型绑定构造函数的prototype属性,然后在实例对象上执行构造
4、函数。varo=newFoo();//等同于varo=newObject();o._proto_=Foo.prototype:Foo.call(o);原型对象自己的_proto_属性,也可以指向其他对象,从而一级一级地形成“原型链”(prototypechain)。vara={x:1};varb={_proto_:a};varc={_proto_:b};c.x//l需要注意的是,一级级向上,在原型链寻找某个属性,对性能是有影响的。所寻找的属性在越上层的原型对象,对性能的影响越大。如果寻找某个不存在的属性,将会遍历整个原型链。this的动作指向不管this在哪
5、里定义,使用的时候,它总是指向当前对象,而不是原型对象。varo={nbsp;a:2,nbsp;m:function(b){nbsp;returnthis.a+1:nbsp;}};varp=Object.create(o);p.a=12;p.m()//13上面代码中,p对象的m方法来自它的原型对象o。这时,m方法内部的this对象,不指向0,而是指向p。构造函数的继承这个小节介绍,如何让一个构造函数,继承另一个构造函数。假定有一个Shape构造函数。functionShape(){nbsp;this.x=0;nbsp;this.y=0;Shape,proto
6、type.move=function(x,y){nbsp;this.x+=x;nbsp:this.y+=y;nbsp;console.info(’Shapemoveck’);};Rectangle构造函数继承Shape。functionRectangle(){nbsp;Shape.call(this)://调用父类构造函数//另一种写法functionRectangle(){nbsp;this.base=Shape;nbsp;this,base();}//子类继承父类的方法Rectangle.prototype=0bject.create(Shape.pro
7、totype);Rectangle,prototype,constructor=Rectangle;varrect=newRectangle():rectinstanceofRectangle//truerectinstanceofShape//truerect.move(1,1)//’Shapemoved.’上面代码表示,构造函数的继承分成两部分,一部分是子类调用父类的构造方法,另一部分是子类的原型指向父类的原型。上面代码中,子类是整体继承父类。有时,只需要单个方法的继承,这时可以采用下面的写法。ClassB.prototype.print=functio
8、n(){nbsp;ClassA.prototype.
此文档下载收益归作者所有