Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何计算Chrome开发工具中自定义类的javascript类名?_Javascript_Google Chrome Devtools_Google Closure Compiler - Fatal编程技术网

如何计算Chrome开发工具中自定义类的javascript类名?

如何计算Chrome开发工具中自定义类的javascript类名?,javascript,google-chrome-devtools,google-closure-compiler,Javascript,Google Chrome Devtools,Google Closure Compiler,我试图确定在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(

我试图确定在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());
以下是控制台中的结果:

obj.Constr
obj.Constr
obj2.Constr2
obj2.Constr2
类的名称似乎是由构造函数最初分配给的变量决定的。我正在寻找CDT用于生成此名称的精确规则。另外,这是谷歌闭包编译器识别的同一个名称吗


我试图看看是否可以在Firebug中重现类似的行为,但似乎无法在控制台中打印类名。作为第二个问题,有人知道如何在firebug中看到这一点吗?

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

因此,正如我所担心的,CDT打印出来的名称不是来自ecmascript规范。对于开发人员来说,这只是一种调试便利。我对Javascript相当陌生,我通常喜欢原型风格,但dojo和extjs等库试图采用OO风格的编程,这让我感到失望。我认为这混淆了Javascript的一个更好的特性。Javascript是一种非常面向对象的语言,实际上非常灵活。有很多库在Javascript之上构建了一个典型的基于类的OO,这通常非常有效。这对这些库或Javascript本身来说都不一定是坏事。