js原型和原型链的理解

/**
 * 在js这门语言中,一切都是对象,继承Object Function
 * 一个对象一旦创建(通过构造函数),就当是造一个盘古出来,开天辟地第一人。
 * 盘古一旦出来,天生有神通。有一个prototype的属性神通。
 * 这个prototype属性指向盘古的小宇宙(原型对象),
 * 也可以理解为prototype就是盘古的原型对象
 * 但是呢这个小宇宙只要constuct属性(最强大招),没啥其他能用神通。
 * 咱们可以在prototype上自定义一些神通上去(属性和方法)
 * 而constuct包含个指针指向盘古的prototype,也指向盘古。(盘古是构造函数,可创建实例)
 * 咱们呢,可以通过new的方式(构造函数)造一些人,就用盘古当模子,造人,
 * 这些人指向的就是盘古的原型对象(constuct指针指向的就是prototype),或者prototype对象。
 * 实例化的对象(人)和盘古还是有一些区别的,这些人没有prototype,
 * 也不能再被其他人当做模子创造实例化对象,没盘古这么牛逼,
 * 但是有__proto__(隐式原型)或者[[prototype]](IE下,标准)
 * 而__proto__指向的就是盘古的小宇宙(原型对象),也是这种指向关系的证明。
 * 而人通过这种关系,都能用盘古的大招。
 * 紧接着咱们再看下,人有__proto__,那盘古有没有呢,盘古从哪来呢,
 * 咱们发现盘古也有,他指向的是谁呢,Object.prototype。
 * 而原型链就是这种指向关系,通过这种指向的关系,咱们可以发现一层一层往上找,最终找到null(混沌)。
 */
var pangu = function(){
};
pangu.prototype.huqi = function(){
    console.log('创造风和云');
};
pangu.prototype.pi = function(){
    console.log('分开天和地');
};
var person1 = new pangu();
var person2 = new pangu();
console.log(person1.pi);//分开天和地
console.log(person2.pi);//分开天和地
person1.pi = function(){
    console.log('劈柴');//重写方法
};
console.log(person1.pi);//劈柴
console.log(person2.pi);//分开天和地
/*************TODO 2、关于Object Function*************/
/**
 * 1、js中一切皆对象,是因为所有的起源都指向了Object.prototype
 * 2、Object.prototype延伸出个内置函数Function.prototype
 *   Function.prototype是个函数工厂,一切函数都来自这里
 *   Function.prototype指向Object.prototype
 * 3、Object和Function都是对象,都指向Object.prototype,可直接定义负责属性
 *    Object和Function也是函数,可直接Function()执行
 *    因为它们都是从内置工厂里面出来的,有函数的特性
 */
js原型和原型链的理解