js中原型链理解

js 原型链大大的困扰我。今天好像弄明白了,赶紧先记录下来

**

1.首先弄清 Object 和Function 关系

**

Object.__proto__ === Function.prototype
//   true
得出 Object是Function 的实例对象

Function.__proto__ === Function.prototype
//   true
得出 Function 也是自己的实例对象(这里很绕,但是死记住就行。之前一直不清楚就是因为这个)

还需要死记的一点
Object.prototype.__proto__
//		null
Object.prototype.__proto__ 是原型链的终点。所以是null,记住了!!

2. 再看看 Array,Object,Function,的关系(同为引用型)

Array.__proto__ === Function.prototype
//		true
Object.__proto__ === Function.prototype
//		true
Array.__proto__ === Object.__proto__
//		true
可以看出 Array,Object 都是Function的实例对象。属于并列关系

3. 来看看具体数据和他们三者的关系

let arr = []
arr.__proto__ === Array.prototype
//		true

let obj = {}
obj.__proto__ === Object.prototype
//		true

let fn = function () {}
fn.__proto__ === Function.prototype
//		true

具体数据是他们三者的实例对象

总结:
Function 就像唐僧,Object就像孙悟空,Array就像猪八戒。Function是师傅,他创造了猪八戒和孙悟空这两个徒弟。(Object,Array 都是Function 的实例)虽然孙猴子(Object)和猪八戒(Array)都是师兄弟属于平级。但是孙武空功夫功夫无敌,而且有两个师傅,还有一个太乙真人,但是太乙真人云游了,没人可以找到他,所以是 null(Object.prototype._ _ proto _ _ === null)

再来说说 { } [ ] 这些具体数据。
他们就像孙悟空的猴子猴孙,猪八戒的猪毛。他们的直接上级是Object和Array。他们和唐僧Function没有直接关系。只能通过Object和Array作为中介才能产生关系。

所以!!! 原型链查找关系
*实例对象 {} 这个猴子猴孙遇到麻烦了,先找孙悟空(Object) 即obj.proto === Object.prototype 孙悟空表示我不行,找我上级唐僧(Function) 即 Object.proto === Function.prototype 唐僧看了看 ,说我也不行。没办法,你去找找你那个云游的太乙真人师傅吧。孙悟空就去找了太乙真人。但是太乙真人云游了,找不到 (null)即 Object.prototype.proto = null * 实在没办法了。这件事就只能找到这里了,实在没人能解决只能已找不到人解决作罢,原型链结束查找

附上图一张辅助理解js中原型链理解_第1张图片

除了 Object  → 根  以外 
//  Object.prototype指向 根 ,但是根的 _ _ protp _ _  是null ,
任意  a → b  都有  a.prototype === b. _ _protp_ _  

你可能感兴趣的:(笔记,js)