JavaScript原型链中函数和对象的理解_第1页
JavaScript原型链中函数和对象的理解_第2页
JavaScript原型链中函数和对象的理解_第3页
JavaScript原型链中函数和对象的理解_第4页
JavaScript原型链中函数和对象的理解_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第JavaScript原型链中函数和对象的理解目录__proto__prototype.__proto__理解

__proto__

最近在看高程4,原型链肯定是绕不过的,本瓜之前一直认为,只要记住这句话就可以了:

一个对象的隐式原型(__proto__)等于构造这个对象的构造函数的显式原型(prototype)

确实,所有对象都符合这句真理,在控制台打印一试便知:

conststr=newString("123")

str.__proto__===Stotype//true

constarr=newArray(["123"])

arr.__proto__===Atotype//true

constobj=newObject()

obj.__proto__===Ototype//true

constbl=newBoolean(false)

bl.__proto__===Btotype//true

......

constfn=function(){}

fn.__proto__===Ftotype//true

虽然我们平常都会像以下这样写居多,声明方式不一样,但结果不变:

conststr='123'

str.__proto__===Stotype//true

constarr=[123]

arr.__proto__===Atotype//true

constobj={}

obj.__proto__===Ototype//true

constbl=false

bl.__proto__===Btotype//true

......

constfn=newFunction()

fn.__proto__===Ftotype//true

顺着这个思路,那我们接着在构造函数上,继续用__proto__寻找,可以得到:

String.__proto__===Ftotype//true

Array.__proto__===Ftotype//true

Boolean.__proto__===Ftotype//true

Object.__proto__===Ftotype//true

Function.__proto__===Ftotype//true

这些基本构造函数(String、Array、Boolean、Object等),都是用Function来构造生成的!!

还能用__proto__继续向上找吗?不能了,因为结果会是一直重复下面这一行代码:

Function.__proto__===Ftotype

所以,不管你怎样通__proto__隐式原型向上找,最终都只能找到Function,而Function的隐式原型等于它的显式原型;

prototype.__proto__

但是这与我们所知不符呀,不是万物皆对象吗??

我们尝试再用__proto__向前探一步,发现:

Function.__proto__.__proto__===Ototype//true

Function.__proto__===Ftotype//true

Ftotype.__proto__===Ototype//true

Function这个终极构造函数,通过查找显式原型的隐式原型,竟然等于Object的显式原型!

其实,其它构造函数也一样,都能找到Object:

Stotype.__proto__===Ototype//true

Atotype.__proto__===Ototype//true

Btotype.__proto__===Ototype//true

Ototype.__proto__===Ototype//true

所有构造函数的显式原型的隐式原型等于Object的显式原型!!

理解

为什么要这样设定呢??

为什么对象只用.__proto__向上查找,最终只能找到Function?

为什么构造函数用.prototype.__proto__向上查找,能找到Object?

这样原型链查找不是有两套逻辑吗?

后来,本瓜歪理解:

【Function】就好像是创造万物的上帝,它创造了:各种各样的物质【对象】,物质又分化为:人【字符串】、鱼【数组】、鸟【布尔】、兽【数值】、石头【Date】、花草【正则】等等分类;

这些不同种类的物质,再一代一代延续(繁衍)下去。。。。。。

问:这些种类,它们子孙或后代们的特性【属性】是来源于哪里呢??

1.可以从它们的祖先那里继承而来,这一点没毛病,生物DNA遗传,龙生龙、凤生凤,老鼠儿子会打洞

letMouse=function(){

this.makeAHole=true

letm1=newMouse()

m1.makeAHole//true

m1.__proto__.makeAHole===Mtotype.makeAHole//true

2.或者还可以从【物质】这个原始分类而来,因为人鱼鸟兽、花草树木、石头都还是属于物质,比如都有碳元素,就像字符串、数组、布尔、数值都是属于对象,都有toString方法;

Ototype.carbon=true

letp1='man'

p1.carbon//true

p1.__proto__.__proto__.carbon===Ototype.carbon//true

对象Object(物质)是由函数Function(上帝)创造的,没毛病。

上帝(Function)也是一种物质(Object),一切都是物质(Objec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论