javascript中的原型解析【推荐】_javascript技巧

javascript中的原型解析【推荐】_javascript技巧

ID:30776591

大小:54.00 KB

页数:4页

时间:2019-01-03

javascript中的原型解析【推荐】_javascript技巧_第1页
javascript中的原型解析【推荐】_javascript技巧_第2页
javascript中的原型解析【推荐】_javascript技巧_第3页
javascript中的原型解析【推荐】_javascript技巧_第4页
资源描述:

《javascript中的原型解析【推荐】_javascript技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、javaScript中的原型解析【推荐】最近在学习javaScript,学习到js面向对彖中的原型时,感悟颇多。若有不对的地方,希望可以指正。js作为一门面向对象的语言,自然也拥冇了继承这一概念,但js中没冇类的概念,也就没有了类似于ja腹中的extends,所以,我觉得js中的继承主要依赖于js中的原型(链)。那么,原型是什么呢?我们知道js中函数亦是一种对彖,当我们创建一个函数吋,其实这个函数也就默认的拥有了一个属性叫做prototype,这个属型叫做原型属性,他是一个指针,指向了这个函数的

2、原型对象,这个原型对象冇一个默认的屈性叫做constructor,这个屈型指向了拥有protptypc屈型的函数。functionPerson(){}Person.prototype={//constructor:Person;firstname:^guo7',haircolor:/zblack/z,city:〃Zhengzhou",act:function(){alert(z,eatling");}};以这个为例,我们先创建了一个函数Person,这个函数默认的冇一个屈性prototype,指

3、向Person,propttype这个对象,这个对彖冇一个默认的屈性constructor(),Person,prototype,constructor>Person.(其实此处默认的是指向Object,后面会做指正)当我们通过构造函数创建了实例后会怎么样呢?functionPerson(){}Person,prototype^!first_name:,zguoz,,hair_color:z,blackz,,city:"zhcngzhou",act:function(){alert("eatti

4、ng");}};varboy=newPerson();vargirl二newPerson();在这时,我们要知道,js屮的构造函数与函数的区别便是这个new关键字,使用new操作符的函数便是一个构造函数。当我们创建了Person的实例对象把它保存在boy,girl时,这两个实例对象会生成一个默认的屈性叫做_proto_(在ECMAScript5中可用[[prototype]]表示),这个属型指向了构造函数的原型对象,也就是boy._proto_>Person.prototype(与构造函数毫无关

5、系)。此时,boy或者girl可以通过点来调用原型对象中的属型,此吋要知道,boy,girl共享了原型对象的属型。我们口J以通过isProtptypeOf()或者object.gctPrototypeOf()(这个函数的返回值为原型对象,也就是_proto_的值)来验证上述结论。alert(Person.prototype,isPrototypeOf(boy));//truealert(Object・getPrototypeOf(boy).first_name);//"guo"此时,我们可以再做

6、进一步验证,若在实例屮创建了一个与原型对彖屈性重名的屈性会怎么样呢?varboy二newPerson();vargirl二newPerson();boy.h3ir_color二〃red";alert(boy.hair_color);//redalert(gir1.haircolor);//blackalert(Object.getPrototypeOf(boy).haircolor);//black由此可见,实例中声明的重名属性会屏蔽的原型对象中的属性,但也仅仅时覆盖,不会对原型对彖的属型造成影

7、响(Object.getPrototypeOf(boy).hair_color==black),也不会对Jt他共享原型对象属型的实例对象产生影响(girl.hair_color==black)0与此同时,可以使用delete操作符删除实例对象声明的属性来撤销掉屏蔽效果。我们可以使用hasOwnPropertyO^验证一个属型是存在于实例的(true),还是存在于原型对象的(false)oalert(boy.hasOwnProperty(〃hair_color〃));//true可以使用Objec

8、t.keys()来枚举属性。varkcy=Objcct・keys(Person.prototype);alert(key);学习了这些,我们会发现,使用上面的写法来声明原型对象会出现一个问题,constructor不再指向Person了,这与我们说的原型对象的constructor属性默认指向含prototype属性的函数背道而驰,这是因为:每创建一个函数会自动创建一个prototype对象,这个对象会默认创建constructor。所以,此处我们的本质是对默认的prototype进行了重写,因

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。