看过构造函数和原型链的不少文章,要么直接讲的比较突兀,不适合新手看,要么只是讲了一部分,今天我来作个了断,梳理一下本身的理解,还请各路大神不吝赐教。 (文中部分推论仅为我的观点,但愿不会把谁谁带进小黑沟里)数组
万物皆对象,对象从何而来?函数
var a = {}; var b = new Object(); var c = Object(); var d = new fn(); var ga = Object.create(null); var gb = Object.create({}); var gc = Object.create(d); // 其实都是实例化构造函数 function user(){ this.name = 'tom'; } fn.prototype.age = 18; var objTom = new user();
构造函数有 .prototype .__proto__ 对象有 .__proto__ (prototype 又是对象)this
objTom.__proto__ 指向 fn.prototypespa
fn.prototype.__proto__ 指向 Object.prototypeprototype
Object.prototype.__proto__ 指向 nullcode
这是最多见的原型链对象
objTom 的咏春拳了得,可是如何代表本身是师出正派 user 呢? 经过constructorip
也就是说 断定一个对象是哪一个门派有两条,一功夫正宗 二功夫师出何门。原型链
var objJohn = {} objJohn.__proto__ = user.prototype objJohn.constructor = user
通过两步 objJohn 正式成为咏春弟子,固然,学了功夫背叛师门的也是有的。
师父的功夫哪里来的呢?固然是本身悟出来的。原型
user虽然是函数,但也是对象,是由 Function 建立。可是Function这种原始天尊又由何而来?
Function 建立了本身,自身的prototype __proto__都是function类型。尽管本身给本身用泥巴捏身体,可是这个泥巴(Function.prototype 函数)从何而来呢?
虽然 Function 能建立本身 可是仍是依赖于 Object和Object.prototype(咱们叫他混沌之灵吧)。
Object 用 Object.prototype 建立了 Function.prototype 函数(对象) (由于指向他的__proto__)
Function 用 Function.prototype 建立了 Function 函数(对象) (由于指向他的__proto__)
Function 用 Function.prototype 建立了 user 函数(对象) (由于指向他的__proto__)
user 用 user.prototype 建立了 objTom 对象 (由于指向他的__proto__)
问题又来了,Object 构造函数从哪里来的呢
总算能够出一口气了。上图咱们能够看到。
1 Object 函数仍是 原始天尊 Function 生产出来的。
2 Object.prototype 咱们的混沌之灵来自 null
因此小小的更新下结论,这个不是鸡和鸡蛋的问题,是从无到有,从简单到复杂的过程。
无 -> 混沌之灵 -> 原始天尊 -> 构造函数 -> 普通对象
null -> Object.prototype -> Function -> Object user等 -> objTom
盗图一张 若有侵权请联系 我会尽快删除
终于看完了,我也终于写完了,表述可还清楚?!看懂了?!看懂赶忙点个赞,累屎我了。
加个鸡蛋 Array.prototype 你知道是什么类型么? 数组,没错咱们目前起码见到了三种类型的prototype了。 Object.prototype.toString.call(Array.prototype) // "[object Array]"