“和“ – 有什么区别?

var Cls = function(){} var inst = new Cls() var obj = {} console.log(inst.constructor) console.log(obj.constructor) 

输出:

 [Function] [Function: Object] 

[Function][Function: Object]什么区别?

一个函数可以有一个不可变的名字 (这个名字和任何可能引用该函数的variables的名字无关)。 函数的名字(如果有的话)是其定义的一部分:

 function NAME () { ... } 

当Node的console.loglogging一个函数时,输出将包含该函数的名称(如果有的话)。

在这里, obj.constructorObject构造函数,它恰好具有名称Object (即,它由function Object() { ... } )定义。 然而,你的Cls函数没有名字(例如,它是由一个匿名函数function() { } )定义的。 如果你给这个函数一个名字,你会看到它由console.log报告:

 var Cls = function thisIsTheNameOfCls(){} var inst = new Cls() var obj = {} console.log(inst.constructor) console.log(obj.constructor) 

这产生输出:

 [Function: thisIsTheNameOfCls] [Function: Object] 

简单的回答:Javascript没有类,它有可以被实例化的函数。 var Cls是一个匿名函数; Object是一个命名函数。


很长的回答:

Javascript函数可以被实例化来创build对象,类似于如何在其他正式的面向对象的语言中实例化类。

这就是说,你所看到的是你使用匿名函数的结果。

输出的第一行简单地显示了inst的构造函数是一个函数。 它没有名字,因此没有名字显示; 它是匿名的

第二行显示它是从Object函数创build的。

这里有两个更好的显示我的观点:

 var Cls = function Cls(){}; var inst = new Cls(); 

现在应该准确地显示

 [Function: Cls] 

同样,你也可以做

 var obj = new Object(); 

这与之类似

 var obj = {}