javascript - 在没有初始原型(prototype)的对象上设置 __proto__

标签 javascript prototype

让我们创建新对象,然后更改其原型(prototype):

var obj = new Object;
obj.__proto__ = new Date;
obj.setTime // is a function

我们看到 obj 现在继承了它的新原型(prototype) new Date 的属性。

然后,我们创建一个没有原型(prototype)的新对象并改变它的原型(prototype):

var obj = Object.create(null);
obj.__proto__ = new Date;
obj.setTime // undefined

我们看到原型(prototype)链不起作用 - obj 没有从 new Date 继承属性,即使它的 __proto__新日期

为什么?

(我猜是因为 Object__proto__ 属性的 setter 中有一些内部逻辑,但不确定)

最佳答案

这是 __proto__Object.getPrototypeOf() 之间的一个细微差别/修改对象的原型(prototype)。

这就是为什么我说服自己我们应该使用 Object.setPrototypeOf()Object.getPrototypeOf() 代替 的原因之一__proto__.

var o = Object.create(null);
Object.setPrototypeOf(o, new Date());
console.log(o.setTime)

关于javascript - 在没有初始原型(prototype)的对象上设置 __proto__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39795410/

相关文章:

javascript - 如何获取键包含下划线中的对象?

javascript - Angular UI 中的 Accordion 式标题图像

javascript - 如何列出 React 项目中未使用的节点模块/依赖项?

javascript - 我可以更改现有 cookie 的值吗?

javascript - 为什么这个 CoffeeScript/JavaScript 不设置创建对象的属性?

将 Object 和 Class 组合在一起的 JavaScript mixin 会产生 TypeError

c - C 中函数的名称

javascript - 我怎样才能从对象链中得到两个对象的长度

javascript - 如何在 node.js 中使用原型(prototype)

c - 将数组传递给c中的函数