JavaScript 的作者Brendan Eich为什么要再给对象弄个__proto__,来引用构造函数的prototype,而不是直接让对象也拥有prototype属性呢?
请不要回答“这你得问Brendan Eich”此类的话
希望得到富有逻辑性的回答
可以从“这样”做的意义在于哪、或者“不是直接让对象也拥有prototype属性”的好处在于哪来讲,谢谢
JavaScript 的作者Brendan Eich为什么要再给对象弄个__proto__,来引用构造函数的prototype,而不是直接让对象也拥有prototype属性呢?
希望得到富有逻辑性的回答
可以从“这样”做的意义在于哪、或者“不是直接让对象也拥有prototype属性”的好处在于哪来讲,谢谢
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
问题并不成立。
这玩意儿不是艾奇设计的,最早的 JS 版本里根本没这玩意儿。首次引入是 2006 年的 Firefox 2.0 版本,随后是 2010 年的 Chrome 4.0 才跟进,IE 直到 IE11 才正式支持。
但在 2015 年的 ES6(ES2015) 之前,这个特性在三家浏览器上是各自实现的,没有标准,所以表现上有一些差别。借着 ES6 引入
Reflect
、class
、super
等跟原型有关的特性时顺势就制订规范了,但随后没多久就被标记为废弃特性,现在已不推荐使用。不过好歹是支持 ES6 的浏览器上表现一致了。也就是说,1995~2006 年之间根本没这玩意儿,2006~2015 年之间一直是私有属性、各家浏览器表现不一致,2015 年形成标准、随后又被宣布废弃。
另外,最早 Firefox 引入
__proto__
的目的是为了方便开发者继承 JS 的内置类型,而不是你所说的为了访问原型链属性。(为什么方便你可以试试看在 ES5 之前你会如何实现一个自定义类型,继承自 JS 内置的Array
?)