美文网首页JavaScript重难点解决
饥人谷作业 --- 原型与原型链

饥人谷作业 --- 原型与原型链

作者: xiaoznz | 来源:发表于2018-07-13 18:47 被阅读0次

这些全局变量分为两种:

一种是 ECMAScript 规定的,比如:global.parseInt,global.parseFloat,global.Number

一种是浏览器自己加的属性,比如:window.alert,window.prompt,window.comfirm

所有 API 都可以在 MDN 里找到详细的资料。这里我主要说的是第一种。

每当我们建一个新的对象时,我们似乎总是能用一大堆原先并没有定义的方法,这是为啥呢?因为有原型这个神奇的东西存在,每当我们申明的时候,他就会自动建立一个__proto__属性与所对应的方法的原型相连,这样我们就共用了原型的方法

讲真话,看到这个我就发愁,又是个自己不太说的清的,于是我选择先上图:

简单的来说,我们要搞清楚原型链的架构,首先就要明白js的内置方法如何被构建起来的,由于js的垃圾回收机制,当一个对象未被引用的时候,就会被视作垃圾,于是就会被清除,但是我们发现Number,String这些方法都没有被清除,这就让人啧啧称奇了。这其实就是在每个对象内部加上了一个prototype属性,叫做该对象的原型属性,又给每个对象加上__proto__,叫做原型链指针,他指向本对象的原型对象,用这种方法使得每个对象相互连接。每当我们声明一个对象时,它就会去找到他所对应的方法的原型,然后予以连接,这也就能在建立一个对象以后,他能拥有许多你本身并没有定义的方法的原因,如图:

此时,我声明了变量a,但是我并没有给a定义方法,但我toString却没有错,就是因为我的__proto__属性已经有了这个方法,所以不报错。

那么每个对象的原型链指针(__proto__)指向谁呢?内置对象的原型对象指向Function的原型,包括内置对象Function自己的,如图:

但是,内置对象的原型对象(Function.prototype)的原型对象是谁呢?因为他本身就是个对象啊,于是他就指向对象的原型对象,于是

也就是说,我们以后看见一个兑现,就判断他是属于啥方法,接着就归到啥方法的原型中去就好了

给出公式:

Object.__proto__    ===    对应方法的原型.prototype;

再举一个例子,还是那个空对象a,a的原型链指向应该是Object的原型,因为他就是Object方法构造出来的,而a.__proto__.__proto__(a的原型的原型链指向)就应该是null,因为他就是object.prototype.__proto__,值为null

相关文章

网友评论

    本文标题:饥人谷作业 --- 原型与原型链

    本文链接:https://www.haomeiwen.com/subject/ojsspftx.html