在javascript中规定,每个函数(大部分时间只针对构造函数来使用)都有一个prototype属性,这个属性就是原型。他的值是一个对象类型的值。
prototype指向另一个对象,我们写的函数会默认的,自动的继承prototype所指向的这个对象。
当数据或者函数需要被共享时,把他交给prototype原型来管理,这样可以节省资源。
结果为:
prototype属性属于构造函数(类),__proto__属于实例化出来的对象。
prototype是标准属性,__proto__非标准属性。
通过构造函数方式实例化出来的对象,内部会包含一个指向构造函数的原型对象(proto)。
所有的对象,都会直接或间接的继承原型对象(所有对象都有原型,原型自带的属性可以直接使用)。
构造函数继承自原型对象(通过prototype属性来调用)实例隐式继承原型对象(通过__proto__属性调用)构造函数通过new关键字得到他的实例对象。(理解为类和对象的关系)
属性读取:先找实例中是否存在属性,如果实例中不存在,则寻找原型属性中是否存在。方法读取:先找实例中是否存在方法,不存在则寻找原型。属性设置:
a:简单数据类型:设置的属性名和原型属性名相同时,设置的是实例对象自己的属性。不会更改原型属性的值。
b:复杂数据类型:如果设置的是复杂数据的内部属性,那么会修改原型属性中的值。如果设置的是这个复杂数据本身,那么设置的就是对象自己的属性。不会更改原型属性的值。
如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h62046.shtml