资讯专栏INFORMATION COLUMN

prototype 与 __proto__ 的爱恨情仇

Render / 330人阅读

摘要:原文经历了上次的的六道坎发现编故事有点上瘾,而且记忆效果也不错哈哈,今天继续唠叨一下与的爱恨情仇。它是万物的尽头,继承于虚无,为。接着由其衍生出第二神,另外一个,也就是。也估计是让人引起误解的源头。所以接下来的问题就更容易了,比如。

原文:https://blog.crimx.com/2017/0...

经历了上次的《JavaScript This 的六道坎》 发现编故事有点上瘾,而且记忆效果也不错哈哈,今天继续唠叨一下 prototype__proto__ 的爱恨情仇。

先理解两者的一个本质区别,prototype 是函数独有的,是人为设定的;__proto__ 是所有对象都有的,是继承的。

然后来看一个两个神的故事:

首先在 ECMAScript 星球,万物起源于 the Engineers,哦不,是一个叫 %ObjectPrototype% 的 intrinsic object,也就是 Object.prototype。它是万物的尽头,继承于虚无, Object.prototype.__proto__null

接着由其衍生出第二神,另外一个 intrinsic object %FunctionPrototype%,也就是 Function.prototype。于是有

Function.prototype.__proto__ === Object.prototype // true

Function.prototype 本身也是个函数对象,这是为了兼容 ES5。也估计是让人引起误解的源头。但两者还是不同的,这是个特殊的函数对象,它忽略参数总是返回 undefined,且没有 [[Construct]] 内部方法。

搞清楚了这两个 Ancient Gods 接下来就很容易了,相信也听过“函数在 JS 里是一等公民”这类的说法,其实是因为它们都是 %FunctionPrototype% 的子民(这里不用 Function.prototype 是为了避免混淆,记得 prototype 是人为设定的),包括 Function 本身。

所以你可以看到,ObjectFunctionStringNumberBoolean 等等等的 __proto__ 都是 Function.prototype

所以接下来的问题就更容易了,比如 Object instanceof Object。前面我们知道 Object.__proto__ 是 %FunctionPrototype%,而它的 __proto__ 是万物之源 %ObjectPrototype%,恰好也是 Object.prototype,所以就是 true 啦。

其它的也是同理,举一反三很简单了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87256.html

相关文章

  • python爬虫——爬取小说 | 探索白子画和花千骨爱恨情仇

    摘要:先打开花千骨小说的目录页,是这样的。网页结构分析首先,目录页左上角有几个可以提高你此次爬虫成功后成就感的字眼暂不提供花千骨全集下载。打开盘查看花千骨文件。 知识就像碎布,记得缝一缝,你才能华丽丽地亮相。 1.Beautiful Soup 1.Beautifulsoup 简介 此次实战从网上爬取小说,需要使用到Beautiful Soup。Beautiful Soup为python的...

    newsning 评论0 收藏0
  • Lo-Dash underscore,Prototype jQuery,两段恩怨情仇

    摘要:一场恩怨,一段纷争,一段历史。后来崛起,并内置了库,从此一炮而红。可见,前端大战以的完胜而告终。无疑,在目前浏览器不完全兼容的情况下,提供的是操作的最佳选择。然而社区的意见偏向于,是唯一选择。的贡献者认为,现状不会改变。 这几天更新我的之前写的 Chrome 插件 ChromeSnifferPlus 可以探测正在使用的开源软件或者 js 类库,两天的时间增加了 20 多个 js 库的检...

    evin2016 评论0 收藏0
  • String、StringBuilder、StringBuffer爱恨情仇

    摘要:当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用而不用的,就是速度的原因。 第三阶段 JAVA常见对象的学习 StringBuffer和StringBuilder类 (一) StringBuffer类的概述 (1) 基本概述 下文以StringBuffer为例 前面我们用字符串做拼接,比较耗时并且也耗内存(每次都会构造一个新的string对象),而这种拼接操作又...

    stormjun 评论0 收藏0
  • MySQL常见两种存储引擎:MyISAMInnoDB爱恨情仇

    摘要:虽然性能极佳,而且提供了大量的特性,包括全文索引压缩空间函数等,但不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。 一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的 ISAM (Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,而且提供了大量的特性,包括全...

    BWrong 评论0 收藏0
  • MySQL常见两种存储引擎:MyISAMInnoDB爱恨情仇

    摘要:虽然性能极佳,而且提供了大量的特性,包括全文索引压缩空间函数等,但不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。 Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 一 MyISAM 1.1 MyISAM简介 MyISAM是MySQL的默认数据库引擎(5.5...

    gougoujiang 评论0 收藏0

发表评论

0条评论

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