javascript原型以及原型链_个人记录

首先每个函数都有一个prototype属性,也就是原型,该属性是一个指针,指向一个对象,原型的主要作用是继承,包含了实例共享的属性和方法(一般来说是共享方法使用原型继承,这样就不要每次new一个实例的时候不要新建方法,构造函数模式的缺点;一般引用类型的属性不用原型继承,因为原型继承是共享的,一个实例修改了引用类型的共享属性,会在所有实例上体现,例如原型上color属性为数组["red","yellow","blue"],一个实例上对这个数组进行了操作,push(“green”),那所有实例上的color都会加上green)。常见的继承是构造函数加原型的混合模式,共享的方法写在原型对象里,需要每个实例独立的属性写在构造函数里。

javascript原型以及原型链_个人记录javascript原型以及原型链_个人记录

原型链是实现继承的主要方法(原型的主要作用是继承,而原型链是实现继承的主要方法,两者不冲突)。基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。构造函数,原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,实例包含一个指向原型对象的内部指针。也就是说实例只有指向原型对象的内部指针(例如chrome下的shili.__proto__),而没有prototype,因为实例是对象,但不是函数对象,所以没有原型对象,实例的__proto__指向new的那个谁,这个谁有prototype原型对象,这个原型对象指向构造函数(一般指向自己),如果是将自身的prototype等于另一个类型的实例(a.prototype = new b),则自身的prototype会包含一个指向另一个原型对象的指针(a.prototype.__proto__ == b.prototype //true).(个人这么理解的new出来的实例直接指向原型对象,其本身没有原型对象,而原型对象本身也有一个指向上一级原型对象的指针,这两个指针在chrome浏览器中使用__proto__来体现的,这样一级指向一级,形成了原型链,最终指向Object,输出Object.prototype.__proto__,结果为null,链结束 )。


不对的地方希望大家看完后指出,谢谢!