下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十分钟带你深入了解javascript的原型和原型链所有引用类型(函数,数组,对象)都拥有__proto__属性(隐式原型)
所有函数拥有prototype属性(显式原型)(仅限函数)
原型对象:拥有prototype属性的对象,在定义函数时就被创建
二,构造函数
先复习下构造函数
//创建构造函数
functionWord(words){
this.words=words;
Wtotype={
alert(){
alert(this.words);
//创建实例
varw=newWord(helloworld
w.print=function(){
console.log(this.words);
console.log(this);//Person对象
w.print();//helloworld
w.alert();//helloworld
print()方法是w实例本身具有的方法,所以w.print()打印helloworld;alert()不属于w实例的方法,属于构造函数的方法,w.alert()也会打印helloworld,因为实例继承构造函数的方法。
实例w的隐式原型指向它构造函数的显式原型,指向的意思是恒等于
w.__proto__===Wtotype
当调用某种方法或查找某种属性时,首先会在自身调用和查找,如果自身并没有该属性或方法,则会去它的__proto__属性中调用查找,也就是它构造函数的prototype中调用查找。所以很好理解实例继承构造函数的方法和属性:
w本身没有alert()方法,所以会去Word()的显式原型中调用alert(),即实例继承构造函数的方法。
三,原型和原型链
Ftotype.a=a
Ototype.b=b
functionPerson(){}
console.log(Person);//functionPerson()
letp=newPerson();
console.log(p);//Person{}对象
console.log(p.a);//undefined
console.log(p.b);//b
想一想p.a打印结果为undefined,p.b结果为b
解析:
p是Person()的实例,是一个Person对象,它拥有一个属性值__proto__,并且__proto__是一个对象,包含两个属性值constructor和__proto__
console.log(p.__proto__.constructor);//functionPerson(){}
console.log(p.__proto__.__proto__);//对象{},拥有很多属性值
我们会发现p.__proto__.constructor返回的结果为构造函数本身,p.__proto__.__proto__有很多参数
我们调用constructor属性,p.___proto__.__proto__.constructor得到拥有多个参数的Object()函数,Ptotype的隐式原型的constructor指向Object(),即Ptotype.__proto__.constructor==Object()
从p.__proto__.constructor返回的结果为构造函数本身得到Ptotype.constructor==Person()所以p.___proto__.__proto__==Ototype
所以p.b打印结果为b,p没有b属性,会一直通过__proto__向上查找,最后当查找到Ototype时找到,最后打印出b,向上查找过程中,得到的是Ototype,而不是Ftotype,找不到a属性,所以结果为undefined,这就是原型链,通过__proto__向上进行查找,最终到null结束
console.log(p.__proto__.__proto__.__proto__);//null
console.log(Ototype.__proto__);//null
大家理解刚才的过程,相信下面这些应该也都明白
//Function
functionFunction(){}
console.log(Function);//Function()
console.log(Ftotype.constructor);//Function()
console.log(Ftotype.__proto__);//Ototype
console.log(Ftotype.__proto__.__proto__);//NULL
console.log(Ftotype.__proto__.constructor);//Object()
console.log(Ftotype.__proto__===Ototype);//true
总结:
1.查找属性,如果本身没有,则会去__proto__中查找,也就是构造函数的显式原型中查找,如果构造函数中也没有该属性,因为构造函数也是对象,也有__proto__,那么会去它的显式原型中查找,一直到null,如果没有则返回undefined
2.p.__proto__.constructor==functionPerson(){}
3.p.___proto__.__proto__==Ototype
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年古诗地名测试题及答案
- 2026年长度单位换算测试题及答案
- FM收音机电路设计与仿真学习课程设计
- 收音机设计基础教程课程设计
- Spark日志分析平台开发课程设计
- FM收音机设计经验分享课程设计
- 羽毛球制作工岗前班组评比考核试卷含答案
- 锑白炉工岗前技术改进考核试卷含答案
- 激光头制造工风险评估与管理强化考核试卷含答案
- 矿井通风操作工安全生产规范强化考核试卷含答案
- 生物浙江宁波市三锋联盟2025-2026学年度高一年级第二(下)学期期中联考(4.22-4.24)
- 2026年二级建造师二建法规考前预测重点知识强化记忆总结笔记
- 2026云南省有色地质局楚雄勘查院下属企业招聘工作人员11人笔试备考试题及答案解析
- 心血管科试卷及分析
- 2026四川发展(控股)有限责任公司所属公司招聘5人笔试参考题库及答案解析
- 湖北省武汉市2026届高三毕业生四月调研考试语文试卷(含答案)
- 养老机构防灾避险课件
- 2026年辽宁能源集团招聘考试指南及模拟题解析
- 2026广东广州市黄埔区大沙街道招聘编外聘用人员4人备考题库及参考答案详解
- 国家事业单位招聘2025中国工艺美术馆招聘拟聘人员笔试历年参考题库典型考点附带答案详解(3卷合一)
- 企业管理 华为会议接待全流程手册SOP
评论
0/150
提交评论