在Chrome开发者工具中,对象以“构造函数”为前缀是什么意思?

问题描述

我正在使用ExtJs,并且想获取所有Stores(应用程序的状态)的快照,所以我想我将遍历{{1} }并收集每个Stores属性(只要该值本身不是data ExtJs)。

如果检查开发人员控制台,可以看到我想要的普通旧对象没有前缀Store,但是constructorStores用于处理状态的类)是前缀为ExtJs

constructor prefixes

最初,我认为以constructor为前缀与实例化对象的方式有关,但是我无法使用以下任何一种方式来重现constructor前缀。

constructor

是什么意思?如何检查Chrome开发者控制台是否为对象赋予了> (function() {return {}})() < {} > class test {} < undefined > new test() < test {} > class test2 extends test{} < undefined > new test2() > test2 {} > new (function() {}) < {} > function test3() {} < undefined > new test3() < test3 {} > Object.fromEntries(Array(20).fill(0).map((_,i) => [`${i}_someproperty`,"yeet"])) < {0_someproperty: "yeet",1_someproperty: "yeet",2_someproperty: "yeet",3_someproperty: "yeet",4_someproperty: "yeet", …} > {} < {} > (function(){return {}})() < {} 前缀?

解决方法

我不熟悉ExtJS,但是在我看来,这很可能是某种通用子类创建的结果,该子类使用的函数恰好总是被命名为constructor,例如

function makeExtension(original) {
  // old-style prototype/constructor extension
  function constructor() {
    original.apply(...arguments);
  }
  constructor.prototype = Object.create(original.prototype);
  return constructor;
}

// old-style constructor
function Foo() {}
Foo.prototype.m = function() { console.log("hello world"); };

let Bar = makeExtension(Foo);

鉴于此,对象在控制台/检查器中的类型位置显示为“ constructor”:

> new Bar()
< ▸ constructor {}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...