/* * 1.构造函数里有属性及方法-----其构造的实例对象直接通过new构造时获得这些属性和方法 * 2.构造函数里的原型prototype-----这个原型对象:包括1).原型对象里的属性和方法 ---实例化对
/* * 1.构造函数里有属性及方法----->其构造的实例对象直接通过new构造时获得这些属性和方法 * 2.构造函数里的原型prototype----->这个原型对象:包括1).原型对象里的属性和方法 --->实例化对象里的__proto__指向这个原型对象,可以访问这里的属性和方法 * 2).constructor构造器--->指向构造函数 * 3).__proto__---->Object这个构造函数的原型对象Object.prototype * * 3.构造函数里的__proto__----->指向构造他的构造函数的原型对象---->Function.prototype * * * 4.实例对象的原型__proto__---->指向构造他的构造函数的原型对象---构造函数的prototype * 实例化对象与构造函数之间没有直接联系,通过原型对象进行联系,这就是原型链 * * 5.改变原型的指向实现继承:将一个构造函数的prototype指向一个实例化对象(a),那么由这个构造函数构造的实例化对象(b)的__proto__就指向了 * 这个实例化对象(a),由此b可以得到a的属性和方法,并且可以通过a的__proto__获得a的构造函数原型prototype里的属性和方法 * * 6.prototype和__proto__ * * prototype是函数(普通函数或构造函数或方法)特有的原型--->指向一个原型对象,即prototype对象:里面包含着可以继承的原型属性和方法 * prototype的指向可以改变,通过改变prototype的指向,可以形成多级的原型链,实现多代的继承 * * __proto__是对象特有的隐式原型,指向构造这个对象的构造函数的prototype * * 一个实例化对象的原型链就是通过__proto__的这个指向得出的,这样实例化对象可以得到构造函数原型对象里的属性和方法,实现继承 * * * * 7.函数可以看成一个对象,那么他的__proto__指向哪里呢?指向构造他的构造函数的prototype,所以就指向Function.prototype * 所有的函数都可以看成是Function的一个实例化对象 * 另外,Function是其自身的构造函数,Function.__proto__ 就指向其自身的原型对象Function.prototype * console.dir(Function.prototype == Function.__proto__); 结果为true * * 8. 对象的__proto__会指向指向构造这个对象的构造函数的prototype,那么原型链最终的原型对象prototype这个对象的__proto__指向 * 哪里呢?------>指向Object.prototype * 即原型对象是Object这个构造函数的实例化对象 * Object.prototype.__proto__最终为null * * * * * */