原型链:
原型链主要是指实例与原型的关系,与构造函数无关
原型的[[prototype]]属性(在某些浏览器中可用__proto__属性)指向其原型,当这个原型又是另外一个原型的实例,那个原型的[[prototype]]属性会指向另一个原型,以此类推,这样在实例和原型之间构造了一条原型链
实例、构造函数、原型对象三者关系:
构造函数的prototype属性指向它的原型对象,原型对象的constructor属性指回构造函数,实例的[[prototype]](__proto__)属性指向原型对象
所以当看到一个原型对象的constructor属性的时候,可以大概率反推构造函数(因为存在重写,所以是大概率)
属性搜索原理:
利用原型链,当在一个实例上找不到一个属性的时候,就会沿着原型链找它的原型,如果此时的原型有这个属性,就返回这个属性,如果没有则继续往上一层的原型寻找,直到null(原型链的尽头),这时候就返回undefind
javascript主要利用原型链实现继承,继承过程中,如果子类新增的属性或方法与原型某个属性或方法名相同,这时候会遮蔽原型的这个属性或方法
instanceof原理:
只要在原型链上出现过这些构造函数的原型,都会返回true
原型改写会破坏原型对象与构造函数的关系,主要是破坏了原型对象的constructor指向(js创建构造函数时,其内部有个指针指向其原型对象,其原型对象又有一个属性指回构造函数)
Object.create(obj) ====>以obj为原型创建一个对象,但创建的每个对象都会共享原型的信息,即属性中的引用类型会共享
——————以上为查阅相关资料后的一些个人思考与总结