【发布时间】:2016-12-01 02:05:14
【问题描述】:
我一直在玩和研究 Javascript 中的 prototype chain,这个主题让我想知道......是否有一个通用名称或术语来指代原型链末尾的所有其他对象?
我在 GitHub repo of mine 上写了一个降价文件,我把它称为“上帝”对象。但我不太确定这个对象的行为方式。
例如,我是否可以将一种特定类型的对象(比如说,Dog 对象)的引用更改为拥有自己的“上帝”,还是会被这个单一的“上帝”对象卡住?
【问题讨论】:
-
所有其他原型的最终原型是 Object.prototype。理论上,您可以通过 Object.create(null) 制作一个没有原型的对象,这可以用来形成不源自 Object.prototype 的第二个原型链 - 但不要这样做,这不是一个好主意。跨度>
-
原因是很多代码会假设对象具有最终是原型属性的某些方法 - 特别是 .hasOwnProperty() 或 .toString() - 如果你传递了一个没有' t 继承自 Object.prototype,否则会在健壮的代码中生成异常。
-
对了,别忘了
Object其实是一个函数(可以作为构造函数),所以Object.__proto__ === Function.prototype -
请不要使用
__proto__,它已被弃用。你应该使用Object.getPrototypeOf(Object.getPrototypeOf(Object)) -
@PMV 有人会争辩说,依赖于所有具有
.hasOwnProperty和.toString属性(以及它们的值是某些函数)的对象的代码被破坏了。需要修正的是这个错误的假设,而不是创建非常规对象的代码。
标签: javascript ecmascript-6 prototype ecmascript-5