为什么要执行Object.create(null)并随后将其原型设置为Object.prototype将不允许执行Object.prototype中的方法

问题描述 投票:0回答:1

我正在使用Object.create()方法进行调整。当我执行以下代码时,我希望我的对象应该能够使用Object.prototype中的方法,但事实并非如此。为什么会这样,以及如何克服呢?

const obj1 = Object.create(null);
obj1.__proto__ = Object.prototype;

// Expectation: "[object Object]"
console.log(obj1.toString());     // Uncaught TypeError: obj1.toString is not a function

[此外,我在Chrome DevTools中注意到一件事,通常__proto__为浅洋红色(具有不透明性),而上面的示例中的__proto__为深洋红色(具有不透明性),就像obj1的固有属性。

javascript prototype
1个回答
0
投票

[__proto__Object.prototype的设置器。

console.log(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__'));

为了可靠地设置原型,请改用Object.setPrototypeOf

const obj1 = Object.create(null);
Object.setPrototypeOf(obj1, Object.prototype);
console.log(String(obj1));

const obj2 = Object.create(null);
console.log(String(obj2));
© www.soinside.com 2019 - 2024. All rights reserved.