怎样明白_proto_和prototype

(怎样明白_proto_和prototype)

原型空间

我们晓得在js中万物皆对象,如今我们假定每个对象建立时都邑发生一个原型空间(原型对象 )

如今我们记着三句话

实例由其定义同享原型空间
由__proto__来寻觅定义的原型空间
由prototype来寻觅自身的原型空间

实例由其定义同享原型空间

ps

p:prototype
[p]: _proto_
此图片为转载

《怎样明白_proto_和prototype》

此图片为转载
《怎样明白_proto_和prototype》

从上面两张图能够清晰看出这类关联如许就能够构成原型链

《怎样明白_proto_和prototype》
一切函数都是由Function组织函数组织的
function函数也是Function组织函数组织的所以时function自身组织了自身所以自身指向自身的原型空间
我们能够看出图中function的原型空间和animal的原型空间都是object范例(实在第二列的原型空间都是object的实例,但逻辑上不是)

//一切函数范例的隐式原型都雷同 由于都是Function的原型对象建立
//所以组织函数的__proto__是Function
//那末Function的隐式原型 ?
var fun = new Function();
console.log(fun.__proto__===Function.prototype);
console.log(Function.__proto__===Function.prototype);
//所以Function自身的隐式原型和显现原型雷同
//能够看出Object也是函数定义的所以他的山人原型应该是Function 的显现原型
console.log(Object.__proto__===Function.prototype)

那末object的原型空间的原型空间应该是undefined但如许就会让原型链没有终点
为了逻辑完美就令其为null
能够看出真相空间的定义是由其定义的原型空间来定义的(实例和其定义同享原型空间)

function Animal(){}
function Bird(){}
function Swallow(){}
Bird.prototype= new Animal()
Swallow.prototype=new Bird() 
var swallow = new Swallow()
console.log(swallow.__proto__.prototype)
console.log(Swallow.__proto__.prototype)
console.log(Bird.__proto__.prototype)
console.log(Animal.__proto__.prototype)
console.log(Function.prototype.__proto__.prototype)
console.log(Swallow.prototype)
console.log(Animal.prototype)
var animal = new Animal
console.log(animal.__proto__.__proto__)
var obj = {}
console.log(typeof (obj.__proto__.__proto__))
////ps没有修改construct

那末若假定Pobject来定义了Object的原型空间的原型空间那末图中一切的(undefined)的位置的_proto_都邑指向Pobject的原型空间以这个逻辑就能够让无穷迭代下去(指针的指针的…..的指针)
如许向上寻觅原型链和向下寻觅原型链就一致了,但js设想封闭了向上无穷迭代(Object的原型空间为null)

    原文作者:霸王王艾达
    原文地址: https://segmentfault.com/a/1190000019296224
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞