【问题标题】:Why does Object.prototype not set the value of an object?为什么 Object.prototype 不设置对象的值?
【发布时间】:2020-01-18 18:47:52
【问题描述】:

当我发现一些奇怪的东西时,我正在我的网络浏览器中使用 javascript。
我像这样定义了一个类 TestClass

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

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

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

Object.prototype.testProperty='testing';

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

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

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

【问题讨论】:

  • 你从testObj删除原型。它不再从任何地方“继承”任何东西,因为原型链是空的(嗯,null 但同样的事情)。
  • 另外typeof x //"object" 并不意味着它继承 Object 原型。它只是意味着它是一个对象,就是这样。
  • 继承是基于原型链接的,如果去掉了,为什么还要继承呢? typeof 与继承无关。您需要与instanceof联系。

标签: javascript object typeof


【解决方案1】:

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

没有。 大多数 对象继承自 Object.prototype,但有些不继承 - 例如 Object.prototype 对象本身。还有其原型明确设置为null 的对象,例如您在代码中创建的testObjObject.create(null)。其他情况是来自不同领域的对象,它们继承自一个不同的 Object.prototype 对象。

【讨论】:

    猜你喜欢
    • 2012-12-06
    • 2013-08-23
    • 2019-01-04
    • 2014-12-07
    • 2020-08-19
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多