资讯专栏INFORMATION COLUMN

如何理解_proto_和prototype

lk20150415 / 836人阅读

摘要:如何理解和原型空间我们知道在中万物皆对象现在我们假设每一个对象创建时都会产生一个原型空间原型对象现在我们记住三句话实例由其定义共享原型空间由来寻找定义的原型空间由来寻找自己的原型空间实例由其定义共享原型空间此图片为转载此图片为转载

(如何理解_proto_和prototype) 原型空间

我们知道在js中万物皆对象,现在我们假设每一个对象创建时都会产生一个原型空间(原型对象 )

现在我们记住三句话

实例由其定义共享原型空间
由__proto__来寻找定义的原型空间
由prototype来寻找自己的原型空间

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

ps

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

此图片为转载

从上面两张图可以清楚看出这种关系这样就可以形成原型链


所有函数都是由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://www.ucloud.cn/yun/109835.html

相关文章

  • js内功修炼之九阳神功--原型链

    摘要:写在前面如果说是一本武学典籍,那么原型链就是九阳神功。那么,如何修炼好中的九阳神功呢真正的功法大成的技术是从底层上去理解,那种工程师和码农的区别就在于对底层的理解,当你写完一行代码,或者你遇见一个解决的速度取决于你对底层的理解。 写在前面 如果说JavaScript是一本武学典籍,那么原型链就是九阳神功。在金庸的武侠小说里面,对九阳神功是这样描述的:练成「九阳神功」后,会易筋洗髓;生出...

    苏丹 评论0 收藏0
  • js内功修炼之九阳神功--原型链

    摘要:写在前面如果说是一本武学典籍,那么原型链就是九阳神功。那么,如何修炼好中的九阳神功呢真正的功法大成的技术是从底层上去理解,那种工程师和码农的区别就在于对底层的理解,当你写完一行代码,或者你遇见一个解决的速度取决于你对底层的理解。 写在前面 如果说JavaScript是一本武学典籍,那么原型链就是九阳神功。在金庸的武侠小说里面,对九阳神功是这样描述的:练成「九阳神功」后,会易筋洗髓;生出...

    Profeel 评论0 收藏0
  • js内功修炼之九阳神功--原型链

    摘要:写在前面如果说是一本武学典籍,那么原型链就是九阳神功。那么,如何修炼好中的九阳神功呢真正的功法大成的技术是从底层上去理解,那种工程师和码农的区别就在于对底层的理解,当你写完一行代码,或者你遇见一个解决的速度取决于你对底层的理解。 写在前面 如果说JavaScript是一本武学典籍,那么原型链就是九阳神功。在金庸的武侠小说里面,对九阳神功是这样描述的:练成「九阳神功」后,会易筋洗髓;生出...

    morgan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<