Javascript 为什么Object.prototype不设置对象的值?
当我在我的网络浏览器中玩javascript时,我发现了一些奇怪的东西。Javascript 为什么Object.prototype不设置对象的值?,javascript,object,typeof,Javascript,Object,Typeof,当我在我的网络浏览器中玩javascript时,我发现了一些奇怪的东西。 我定义了一个类TestClass,如下所示: class TestClass{}; var testObj=new TestClass(); Object.setPrototypeOf(testObj, null); 当我console.loged testObj时,没有属性 这就是我感到困惑的地方。 typeof testObj返回的“对象”。但当我运行以下命令时: Object.prototype.testPrope
我定义了一个类TestClass,如下所示:
class TestClass{};
var testObj=new TestClass();
Object.setPrototypeOf(testObj, null);
当我console.log
ed testObj时,没有属性
这就是我感到困惑的地方。typeof testObj
返回的“对象”
。但当我运行以下命令时:
Object.prototype.testProperty='testing';
testObj
没有属性testProperty
,尽管我已经为所有对象定义了它,并且根据typeof
,testObj
是一个对象
为什么会这样?不是所有的值都从对象继承属性吗
这也适用于[[Scopes]]
对象。在chrome中,我console.log
一个函数,并将其[[Scopes]]]
属性保存为全局变量时,typeof
返回“object”
,但全局变量没有属性testProperty
不是所有的值都从对象继承属性吗
不是。大多数对象继承自对象.prototype
,但有些对象不喜欢对象.prototype
对象本身。还包括原型显式设置为null
的对象,如在代码中创建的testObj
对象或对象。创建(null)
。其他情况是来自不同领域的对象,它们继承自不同的对象。prototype
对象
不是所有的值都从对象继承属性吗
不是。大多数对象继承自对象.prototype
,但有些对象不喜欢对象.prototype
对象本身。还包括原型显式设置为null
的对象,如在代码中创建的testObj
对象或对象。创建(null)
。其他情况是来自不同领域的对象,它们继承自不同的对象。prototype
对象。您从testObj
中删除了prototype。它不再从任何地方“继承”任何东西,因为原型链是空的(好吧,null
但是相同的东西)。而且typeof x//“object”
也不意味着它从对象原型继承。它只是意味着它是一个对象,就是这样。继承是基于原型链接的,所以如果你删除了它,为什么你仍然期望继承呢typeof
与继承无关。您需要检查instanceof
。您从testObj
中删除了原型。它不再从任何地方“继承”任何东西,因为原型链是空的(好吧,null
但是相同的东西)。而且typeof x//“object”
也不意味着它从对象原型继承。它只是意味着它是一个对象,就是这样。继承是基于原型链接的,所以如果你删除了它,为什么你仍然期望继承呢typeof
与继承无关。您需要检查instanceof
。