原型
prototype
概述:prototype是属于函数的一个空间,他是一个对象,因为构造函数也是函数所以它也具备.而这个prototype属性我们成为显式原型.
函数的prototype
dUI应这个prototype显示是一个对象,里面具备对应的属性及方法.主要为方法.那么就是说这个prototype属性上一半存放对应的方法
构造函数的prototype
从上可得构造函数的prototype是一个对象,第二个里面有个属性constructor指向当前的构造函数
实例对象访问对于的prototype上的内容可以通过实例对象.属性名访问
一般将对应的函数存储在对应的prototype上(这个函数只会声明一次),将函数存储在原型上,讲属性放在构造函数里面.
在prototype里面声明的函数的this指向当前的调用的实例对象
__proto__
概述:他是一个隐式的原型,他是一个属于对象的空间,每个对象都存在这个空间,那么对面的实例对象也是一个对象,所以他也有这个空间,这个空间指向对应的构造函数的prototype.
__proto__的指向问题
__proto__指向对应的构造函数的prototype
构造函数也是一个对象,那么他的__proto__指向谁,指向对应的父类构造函数的prototype
Object的__proto__指向null.
原型链
概述:
对象在 __proto__ 上找属性的链式结构被称为原型链。
从上面的指向问题来看 对象在原型上找属性的过程为
先找自己的 __proto__ (对应的构造函数的prototype),
再找对应的自身构造函数的原型的 __proto__ 找到父类构造函数的原型
型的 __proto__ ,直到找到object为止
Object的原型的 __proto__ (null)上还找不到返回undefined
注意事项
原型链不包含对象赋值
对象赋值的操作是找到这个属性了重新设置值
没有找到这个属性进行 添加这个属性进行赋值操作
总结
构造函数的原型prototype
实例对象的原型 __proto__
实例对象的 __proto__ 指向构造函数的prototype
原型链通过对应的对象的 __proto__ 去找对应的属性 直到找到Object为止
原型一般上面写函数,可以保证函数只声明一次。对应的属性写在构造函数内。
原型上的方法/属性。通过实例对象.属性名直接访问(平常通过对象去点的方法都称为原型方法)
在对应的原型上的函数里面的this指向当前调用的实例对象