原型相关知识

setPrototypeOf( '目标对象','要设置的值' )

getPrototypeOf( '目标对象' )

通过一个对象,生成一个新的对象:利用constructor找到构造函数

obj.--proto--.constructor

原型链检测  instanceof

(a instanceof b): 检测a的原型链上是否存在b构造函数的prototype 

原型链检测  isPrototypeOf

isPrototypeOf:检测一个对象是否是另一个对象的prototype,只要目标对象的原型链上存在,就返回true

( a isPrototypeOf (b)  )  1.a对象是不是b对象的prototype;   2.b的原型对象是不是a

属性检测  in  hasOwnProperty()

in关键字:检测一个属性是否属于一个对象自身,或原型链上

hasOwnProperty():检测一个对象自身是否包含一个属性

定义对象的原型

1.Object.create( '目标对象' , {' 定义属性'} ):创建一个新的对象,让创建出来的这个对象的prototype为目标对象

eg:

原型相关知识

 

原型相关知识 

 2.__proto__,设置原型对象(  这个是一个非标准的属性 )

__proto__的说明:

严格意义来说不是一个属性,原理是利用了setter和getter,当进行设置的时候会自动进行判断,如果设置的值是对象类型,则会生效,否则无效.

3.下面是标准的方法设置和读取原型

setPrototypeOf( '目标对象','要设置的值' )

getPrototypeOf( '目标对象' )

原型的继承

1.原型链继承

1.存在的问题  :  引用类型的值会共享

1.__proto__

原型相关知识

 

2.Object.create( '目标对象' , {' 定义属性'} )

constructor需要重新设置

注意:如果利用Admin.prototype.constructor进行设置,那么constructor,是可以被for   in   遍历的.

Object.defineProperty( '目标对象','属性名称',{ 配置项 })

原型相关知识

 

2.构造函数继承

1.存在的问题  :没办法拿到super原型上的方法

原型相关知识

原型相关知识 

 

3.组合继承(伪经典继承)

即原型链继承+构造函数继承

存在的问题:  调用了两次super函数

原型相关知识

 

4.寄生组合继承(经典继承)

可以避免调用两次super函数

原型相关知识

原型相关知识 

 

5.圣杯模式

上一篇:智能合约语言 Solidity 教程系列1 - 类型介绍


下一篇:ES6 原型链