我正在使用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
的固有属性。
[__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));