JS __proto__存在的意义?

JavaScript 的作者Brendan Eich为什么要再给对象弄个__proto__,来引用构造函数的prototype,而不是直接让对象也拥有prototype属性呢?

请不要回答“这你得问Brendan Eich”此类的话

希望得到富有逻辑性的回答

可以从“这样”做的意义在于哪、或者“不是直接让对象也拥有prototype属性”的好处在于哪来讲,谢谢

阅读 2.1k
1 个回答

问题并不成立。

这玩意儿不是艾奇设计的,最早的 JS 版本里根本没这玩意儿。首次引入是 2006 年的 Firefox 2.0 版本,随后是 2010 年的 Chrome 4.0 才跟进,IE 直到 IE11 才正式支持。

但在 2015 年的 ES6(ES2015) 之前,这个特性在三家浏览器上是各自实现的,没有标准,所以表现上有一些差别。借着 ES6 引入 Reflectclasssuper 等跟原型有关的特性时顺势就制订规范了,但随后没多久就被标记为废弃特性,现在已不推荐使用。不过好歹是支持 ES6 的浏览器上表现一致了。

也就是说,1995~2006 年之间根本没这玩意儿,2006~2015 年之间一直是私有属性、各家浏览器表现不一致,2015 年形成标准、随后又被宣布废弃。

另外,最早 Firefox 引入 __proto__ 的目的是为了方便开发者继承 JS 的内置类型,而不是你所说的为了访问原型链属性。(为什么方便你可以试试看在 ES5 之前你会如何实现一个自定义类型,继承自 JS 内置的 Array?)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题