- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
JavaScriptES5中实现继承
王红元coderwhy
目录
1对象和函数的原型
content
2new、constructor
3原型链的查找顺序
4原型链实现的继承
5借用构造函数继承
6寄生组合实现继承
coderwhy认识对象的原型
◼JavaScript当中每个对象都有一个特殊的内置属性[[prototype]],这个特殊的对象可以指向另外一个对象。
◼那么这个对象有什么用呢?
当我们通过引用对象的属性key来获取一个value时,它会触发[[Get]]的操作;
这个操作会首先检查该对象是否有对应的属性,如果有的话就使用它;
如果对象中没有改属性,那么会访问对象[[prototype]]内置属性指向的对象上的属性;
◼那么如果通过字面量直接创建一个对象,这个对象也会有这样的属性吗?如果有,应该如何获取这个属性呢?
答案是有的,只要是对象都会有这样的一个内置属性;
◼获取的方式有两种:
方式一:通过对象的__proto__属性可以获取到(但是这个是早期浏览器自己添加的,存在一定的兼容性问题);
方式二:通过Object.getPrototypeOf方法可以获取到;
coderwhy函数的原型prototype
◼那么我们知道上面的东西对于我们的构造函数创建对象来说有什么用呢?
它的意义是非常重大的,接下来我们继续来探讨;
◼这里我们又要引入一个新的概念:所有的函数都有一个prototype的属性(注意:不是__proto__)
◼你可能会问题,老师是不是因为函数是一个对象,所以它有prototype的属性呢?
不是的,因为它是一个函数,才有了这个特殊的属性;
而不是它是一个对象,所以有这个特殊的属性;
coderwhy再看new操作符
◼我们前面讲过new关键字的步骤如下:
1.在内存中创建一个新的对象(空对象);
2.这个对象内部的[[prototype]]属性会被赋值为该构造函数的prototype属性;
◼那么也就意味着我们通过Person构造函数创建出来的所有对象的[[prototype]]属性都指向Person.prototype:
coderwhy创建对象的内存表现
functionPerson(){}Person函数的原型对象
prototypeconstructor
varp1=newPerson()
varp2=newPerson()
p1对象
__proto__
p2对象
__proto__
coderwhyprototype添加属性
functionPerson(){}Person函数的原型对象
prototypeconstructor
namewhy
varp1=newPerson()a
您可能关注的文档
最近下载
- 古诗赏析-李白《将进酒》课件精品课件(31页).pptx VIP
- 一种自然发酵加香起泡葡萄酒及其酿造工艺.pdf VIP
- 新《劳动合同法》下企业如何规范用工和完善人事管理课件.ppt
- 大型城市客车车身骨架结构设计.doc
- 申龙电梯SSL-2100电梯控制器手册调试资料.pdf
- 2023-2024学年贵州省贵阳市高二(上)期末英语试卷.docx VIP
- 苏S01-2012-给水排水图集.docx
- 2.2 抒情与写意——文人画(课件)-2023-2024学年高中美术人美版(2019)美术鉴赏.pptx
- 全口径债务监测平台系统操作培训.pptx
- 2024全液冷冷板系统参考设计及性能测试白皮书.pdf VIP
文档评论(0)