JS高级编程课件07_JavaScript ES5实现继承.pdf

JS高级编程课件07_JavaScript ES5实现继承.pdf

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

yzs890305 + 关注
实名认证
内容提供者

计算机二级持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年11月02日上传了计算机二级

1亿VIP精品文档

相关文档