如何在Chrome Dev Tools中为自定义类计算javascript类名?

And*_*erg 5 javascript google-closure-compiler google-chrome-devtools

我试图确定在javascript中生成类名的规则.我将此脚本粘贴到Chrome开发工具控制台:

var obj = { 
    Constr : function() {  }
};

var obj2 = obj;
console.log(new obj.Constr());
console.log(new obj2.Constr());

obj2.Constr2 = function() {  };
console.log(new obj.Constr2());
console.log(new obj2.Constr2());
Run Code Online (Sandbox Code Playgroud)

以下是控制台中的结果:

obj.Constr
obj.Constr
obj2.Constr2
obj2.Constr2
Run Code Online (Sandbox Code Playgroud)

似乎类的名称由构造函数最初分配给的变量确定.我正在寻找CDT用来生成此名称的精确规则.此外,这与Google Closure Compiler识别的名称相同吗?

我试图看看我是否可以在Firebug中重现类似的行为,但我似乎无法在控制台中打印出类名.作为第二个问题,有谁知道如何在萤火虫中看到这个?

lan*_*nzz 3

Javascript 中没有类,因为它是基于原型的 OOP,而不是基于类。Chrome显然做了一些推导,以便在控制台中打印对象的一些描述,但这不是标准中的标准Javascript \xe2\x80\x94,对象没有命名类,并且你无法弄清楚类的名称该对象属于,因为唯一的继承是通过实际的[[Prototype]]内部伪属性完成的,它本身也是一个对象,没有名称或“类”。通常,您可以通过查看来推断出类似于类名的内容object.__proto__.constructor.name,这将返回函数的名称,该函数是实例化对象的构造函数;此函数可能是匿名的,或者您的浏览器可能不支持非标准__proto__属性,或者对象的原型可能不包含对其构造函数的正确引用。通常,你无法知道 JS 中对象的“类”;你只能测试后代(object instanceof Constructor),但仍然是根据 constructor 对象原型中的属性来实现,这可能是不正确的。

\n