当我注意到一些奇怪的东西时,我正在我的网络浏览器中玩javascript。
我像这样定义了一个类TestClass:
class TestClass{};
var testObj=new TestClass();
Object.setPrototypeOf(testObj, null);
当我console.log
edtestObj时,没有任何属性。
这就是我感到困惑的地方。typeof testObj
"object"
返回。但是当我运行以下内容时:
Object.prototype.testProperty='testing';
testObj
没有属性testProperty
,即使我已经为所有对象定义了它,并且根据typeof
,testObj
是一个对象。
为什么会这样?不是所有值都继承Object
的属性吗?
[[Scopes]]
对象也会发生这种情况。当我在 chrome 中console.log
一个函数并将其[[Scopes]]
属性保存为全局变量时,typeof
返回"object"
但全局变量没有属性testProperty
。
不是所有值都继承
Object
的属性吗?
不。大多数对象继承自Object.prototype
,但有些则不然 - 如Object.prototype
对象本身。还有原型显式设置为null
的对象,例如您在代码或Object.create(null)
中创建的testObj
。其他情况是来自不同领域的对象,这些对象继承自不同的Object.prototype
对象。