
为了解决各个实例对象之间的方法或属性共享,js提供了prototype属性 对于构造函数而言,prototype是构造函数的一个属性,对于对象实例来说,prototype是对象实例的原型对象;所以prototype既是属性又是原型对象; 原型对象的属性不是对象实例的属性。对象实例的属性是构造函数的属性;


读取对象的某个属性时,JavaScript引擎会优先去寻找实例对象自身的属性,如果找不到就到它的原型去找,还是找不到就到它的原型的原型去找,以此类推,直到到达最顶端的Object.prototype还是找不到则返回undefined;如果对象自身和它的原型都定义了相同名称的属性,那么优先读取对象自身的属性,类似java中的覆盖一级级在原型链中寻找某个属性对性能是有一定的影响的,如果寻找一个不存在的属性,将会遍历整个原型链;constructor属性:constructor是prototype的一个属性,默认指向prototype对象所在的构造函数;注意:prototype是构造函数的属性,而constructor是prototype的属性,constructor又指向了prototype所在的构造函数;由于constructor是定义在原型对象prototype上的,所以constructor可以被所有实例对象继承;一个函数或方法,都有prototype属性,prototype下面都有constructor属性,而且constructor属性值都指向了该函数或方法;


个人理解,有不对的地方,欢迎大家指出,共同学习!
