让我们创建新对象,然后更改其原型(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/