- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScript程序中实现继承特性的方式总结
JavaScript是一门强行声称面向对象的语言,而继承是 面向对象的一大主要特性,这里我们根据阮一峰老师的文章 来看一下JavaScript程序中实现继承特性的方式总结 概述
JavaScript的所有对象,都有自己的继承链。也就是 说,每个对象都继承另一个对象,该对象称为“原型” (prototype)对象。只有null除外,它没有自己的原型 对象。
原型对象的重要性在于,如果A对象是B对象的原型, 那么B对象可以拿到A对象的所有属性和方法。Obje ct. getProto typof方法用于获取当前对象的原型对象。
varp=Objec t. getProtot ypeOf (obj):
上面代码中,对象P就是对象obj的原型对象。
Object, create方法用于生成一个新的对象,继承指定 对象。
varob j=0bject. cr eate(p);
上面代码中,新生成的ob j对象的原型就是对象p。
非标准的_口〖010_属性(前后各两个下划线),可以 改写某个对象的原型对象。但是,应该尽量少用这个属性, 而是用 Object . getPrototy peofO 和 Obje ct. setProto
typeOfO,进行原型对象的读写操作。 v arobj={}; va rp={}:
obj. __proto_=p;
Object, ge tPrototypeO f (obj) ===p//true
上面代码通过_proto_属性,将p对象设为ob j对象
的原型。
下面是一个实际的例子。
vara = {x: 1};
varb ={__proto_: a};
b. x//l
上面代码中,b对象通过_proto_属性,将自己的原 型对象设为a对象,因此b对象可以拿到a对象的所有属 性和方法。b对象本身并没有x属性,但是Java Script引 擎通过__proto_属性,找到它的原型对象a,然后读取a 的x属性。
new命令通过构造函数新建实例对象,实质就是将实例 对象的原型绑定构造函数的prototy pe属性,然后在实例 对象上执行构造函数。
va ro=newFoo();
//等同于
varo=newObject();
o. _prot o_=Foo. pro totype:
Foo. call (o);
原型对象自己的_pro to_属性,也可以指向其他对象, 从而一级一级地形成“原型链”(p rototypecha in)。 vara={x : 1};
varb={_proto_:a};
varc={_pr oto_: b};
c. x//l
需要注意的是,一级级向上,在原型链寻找某个属性, 对性能是有影响的。所寻找的属性在越上层的原型对象, 对性能的影响越大。如果寻找某个不存在的属性,将会遍 历整个原型链。
t his的动作指向
不管this在哪里定义,使用的时候,它总是指向当前 对象,而不是原型对象。 varo={
nbs p;a:2,
nbsp;m:function(b) {
nbsp;ret urnthis. a+1 :
nbsp;}
};
varp=Object . create (o);
p. a=12;
p. m()//13
上面代码中,p对象的m方法来自它的原型对象o。这 时,m方法内部的this对象,不指向0,而是指向p。
构造函数的继承
这个小节介绍,如何让一个构造函数,继承另一个构 造函数。
假定有一个S hape构造函数。
fu nctionShape () {
nbsp; thi s. x=0;
nbsp;this. y=0;
Shape, prot otype. move=function (x, y) { nbsp; thi s. x+=x; nbsp : this. y+=y;
nbsp; cons ole. info (’ S hapemoveck ’);
};
Recta ngle构造函数继承S hape。 functi onRectangle () {
nbsp;S hape. call (t his) ://调用父类构造函数
//另一种写法
functionRe ctangle () {
nbsp;this. base=Shape;
nbsp; this, b ase ();
}
//子类继承父类的方法
Re ctangle. pro totype=0bje ct. create (S
hape. protot ype);
Rect angle, proto type, constr uctor=Recta ngle; varr ect=newRect angle (): r ectinstance of
文档评论(0)