为什么 Object.prototype 不设置对象的值?



当我注意到一些奇怪的东西时,我正在我的网络浏览器中玩javascript。
我像这样定义了一个类TestClass

class TestClass{};
var testObj=new TestClass();
Object.setPrototypeOf(testObj, null);

当我console.logedtestObj时,没有任何属性。

这就是我感到困惑的地方。
typeof testObj"object"返回。但是当我运行以下内容时:

Object.prototype.testProperty='testing';

testObj没有属性testProperty,即使我已经为所有对象定义了它,并且根据typeoftestObj是一个对象。

为什么会这样?不是所有值都继承Object的属性吗?

[[Scopes]]对象也会发生这种情况。当我在 chrome 中console.log一个函数并将其[[Scopes]]属性保存为全局变量时,typeof返回"object"但全局变量没有属性testProperty

不是所有值都继承Object的属性吗?

不。大多数对象继承自Object.prototype,但有些则不然 - 如Object.prototype对象本身。还有原型显式设置为null的对象,例如您在代码或Object.create(null)中创建的testObj。其他情况是来自不同领域的对象,这些对象继承自不同的Object.prototype对象。

最新更新