【问题标题】:"Value below was evaluated just now", what does it mean?“刚刚评估了下面的值”,这是什么意思?
【发布时间】:2019-09-08 16:21:39
【问题描述】:

伙计们! 我正在尝试列出使用new 关键字创建实例时幕后发生的情况。

这是我的代码的样子

function F() {}
let f1 = new F()
f1.__proto__

到目前为止,我的理解是当使用new 时,会创建一个包含以下两件事的新对象

{
  constructor: f <-- this is the constructor function F(), referring to itself
  __proto__: Object <-- since this is not sub-classing any other Object, every object except Object inherits from Object.prototype
}

这种理解正确吗?

当我运行它时,我在 Google Developer Console 中得到以下信息

Value below was evaluated just now 是什么意思?

谢谢

【问题讨论】:

  • 正是它所说的。您登录到控制台的对象刚刚被评估,它可能会显示与登录到控制台时不同的值。快速(重新)搜索也可以解释该消息。
  • f1.__proto__ 将设置为F.prototype,即Object,因为它尚未设置为其他任何值。

标签: javascript prototype developer-console


【解决方案1】:

简单地说,控制台会在您按下展开图标时评估对象。这是一个测试。

  1. 在控制台中输入o = {}。输出将类似于&gt;{}。不要扩张!

  2. o 对象添加一个属性。 o.x = 1

  3. 现在返回并展开先前的输出。它将具有您在创建输出后明显添加的 x 属性。但是输出仍然具有x 值。

因为……

值是在您扩展输出时评估的,而不是在创建时评估。

【讨论】:

    【解决方案2】:

    刚刚评估了下面的值

    基本上意味着您在控制台中查看对象时所看到的是对象的值。 如果您在应用代码中使用例如 console.log(someObject),这是有用的信息。

    它告诉您的是,您在浏览器控制台中看到的是 someObject 的当前值,而不一定是对象在执行 console.log 时的值(对象可能不同在代码执行时)。

    基本上这是因为它只是引用对象,而属性/方法在您在控制台窗口中展开之前是不可见的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2018-01-11
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多