如何JavaScript类名计算的Chrome浏览器开发工具自定义类?(How are javasc

2019-06-27 16:39发布

我想,以确定在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?

Answer 1:

有没有班在Javascript中,因为它是基于原型的OOP,而不是基于类的。 铬显然不会为了打印控制台对象的一些介绍一些推导,但不是标准的JavaScript - 标准,对象没有命名的类,并且你不能找出对象所属的类的名字,因为唯一的继承是通过实际完成的[[Prototype]]内部伪性能,这也是其本身就是一个对象,没有名字或“类”。 通常情况下,你可以通过查看演绎类似于一个类名的东西object.__proto__.constructor.name ,这将返回是从哪个对象实例化的构造函数的名称; 不过这个功能可能是匿名的, 或者您的浏览器可能不支持非标准的__proto__属性, 对象的原型可能不包含正确的引用给它的构造。 一般情况下,你可以不知道在JS对象的“类”; 你只能测试descendancy( object instanceof Constructor ),而根据仍然实现constructor的对象原型属性,它可能是不正确的。



文章来源: How are javascript class names calculated for custom classes in Chrome Dev Tools?