//首先用[构造函数]B new 一个[实例]a
function B(){
this.type='字母'
}
var a=new B();
//那么我们就可以说 a的constructor就是B
console.log(a.__proto__==B.prototype)//true
//于是我们可以说a.__proto__就指向了a的构造器的原型
//即a.constructor.prototype
//因为函数也是函数对象,也就是说B是Function这个构造一切函数的构造器的其中一个实例
console.log(B.__proto__==Function.prototype)//true
//接下来我们Function
console.log(Function.__proto__==Function.prototype)//true
//既然Function.__proto__==Function.prototype
//这不是会一直循环吗?
//那好办,我们开始找Function.prototype的__proto__好了
//我们接着想,因为所有的构造函数的原型都是对象,
//那么Function.prototype肯定也是一个对象,
//而且是一个object对象(重点来了),
//构造器(constructor)自然是这个叫做Object的构造函数
console.log(Function.prototype.__proto__==Object.prototype)//true
//哦!终于没循环了,我们来找Object.__proto__
console.log(Object.__proto__==Function.prototype)//true
//啊哈,我们又回到了循环的起点
//然而起点的结束迎来的终点的开篇
console.log(Object.prototype.__proto__==null)//true
//Object.prototype.__proto__==null也正是是原型链的终点//别问俺为啥子等于null,俺也不晓得
//按照我们的思路应该是等于Object.prototype,
//这样就可以开始下一个循环了...