“和“ – 有什么区别?
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.log
logging一个函数时,输出将包含该函数的名称(如果有的话)。
在这里, obj.constructor
是Object
构造函数,它恰好具有名称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 = {}