上次说到了构造函数的注意事项 ! 接下来是构造函数的原型对象
构造函数的原型对象
原型对象是什么?
- 在构造函数创建出来的时候,系统会默认帮构造函数创建并关联的一个新对象
- 自定义构造函数的原型对象默认是一个空对象。
原型对象的作用是什么?
- 构造函数中的原型对象中的属性和方法可以被使用该构造函数创建出来的对象使用。
- 即以自定义构造函数方式创建出来的所有对象,自动拥有和共享该构造函数的原型对象中的所有属性和方法。
如何访问构造函数的原型对象
构造函数.protoType
如何为构造函数的原型对象添加属性和方法
- 利用对象的动态特性来为构造函数的原型对象添加属性和方法
- 通过我们把”构造函数的原型对象”简化为”构造函数的原型”。
- 示例代码 :
|
|
使用原型解决构造函数创建对象的问题
- 示例代码 :
|
|
实例化对象和实例
实例化
通过构造函数创建具体对象的过程实例
通过构造函数实例化出来的对象,我们称之为该构造函数的一个实例注意点 :
在说实例的时候,一定要指定是某个具体构造函数的实例
示例代码 :
|
|
原型的使用方法
- 利用对象的动态特性来设置原型对象
|
|
- 实例成员
1.实例属性
2.实例方法 - 原型成员
1.原型属性
2.原型方法
替换原型对象(字面量)
注意点:1.如果是替换了原型对象,那么在替换之前创建的对象和替换之后创建的对象她们指向的原型对象并不是同一个
2.构造器属性
在替换之后创建的对象中,它的构造器属性指向的不是Person构造函数,而是Object的原型对象的构造器属性建议:
在设置完原型对象之后再统一的创建对象。
|
|
构造器
- 属性:constructor
- 值:与之关联的构造函数
- 注意点:
constructor是在原型对象身上的,我们通过对象.constructor访问得到的值其实就是原型对象中对应的值
使用原型对象的注意事项
- 如何访问原型对象上面的属性
1.对象.属性
2.构造函数.prototype.属性 - 属性的访问(读取)原则
1.就近原则,在访问属性的时候,先在对象自身查找(实例属性|方法),如果找到那么就直接使用
2.如果没有找到,那么就去它的原型对象身上查找,如果找到那么就使用,找不到则undefined或者是报错 设置原型属性
1.如果是左值,那么在设置对象的属性的时候,不会去原型对象上面去找(查找自己是否有,如果有就是修改,没有就是添加)
2.如果是右值,那么在读取值的时候,先查找自己,如果找不到,再去原型身上找设置原型属性的方法:
1.只能通过构造函数.prototype.属性或者是直接替换原型对象的方式来设置
2.如果原型对象的属性是引用类型的,那么可以通过对象的方式来进行设置示例代码1
|
|
- 示例代码2
|
|
- 示例代码3
|
|
指针
- 如果是使用构造函数创建对象,那么在创建的对象中,有一个<__proto__>指针指向其构造函数对应的原型对象
- 访问原型对象的方法
1.构造函数.prototype
2.对象.<__proto__> - 注意点:
这个属性不是ECMA标准里的,它是部分浏览器厂商为了方便程序员开发和调试而提供的一个属性,是非标准的。 - 示例代码 :
|
|
hasOwnProperty
in 关键字
1.检查对象中是否有指定的属性(实例属性 + 原型属性)
2.遍历对象
3.语法:“属性” in 对象hasOwnProperty
作用:检查对象中是否存在指定的属性(实例属性)
语法:对象.hasOwnProperty(“属性”)需求:
1.要求判断某个属性是否是原型属性,而且仅仅只是原型属性
2.该属性存在
3.该属性不是实例属性- 示例代码 :
|
|
isPrototype
- isPrototype判断是否是原型对象的
- instanceof 判断某个对象是否是指定构造函数的实例对象
- 示例代码 :
|
|
思维导图 –> 如果图片不是很清晰的话 请下载到本地查看
