var Cls = function(){}
var inst = new Cls()
var obj = {}
console.log(inst.constructor)
console.log(obj.constructor)
输出:
[Function]
[Function: Object]
[Function]
和[Function: Object]
之间有什么区别?
答案 0 :(得分:3)
简短回答:Javascript没有类,它具有可以实例化的功能。 var Cls
是一个匿名函数; Object
是一个命名函数。
答案很长:
Javascript函数可以实例化以创建对象,类似于如何在其他面向对象的正式语言中实例化类。
话虽这么说,你所看到的是你使用匿名函数的结果。
第一行输出只显示inst
的构造函数是一个函数。它没有名称,因此没有显示名称;它是匿名。
第二行显示它是从Object
函数创建的。
以下两个版本更能说明我的观点:
var Cls = function Cls(){};
var inst = new Cls();
现在应该准确显示
[Function: Cls]
同样,您也可以
var obj = new Object();
类似于
var obj = {}
答案 1 :(得分:1)
一个函数可以有一个不可变的名称(它与可能引用该函数的任何变量的名称无关)。函数的名称(如果有的话)是其定义的一部分:
function NAME () { ... }
当Node console.log
记录一个函数时,输出将包含函数的名称(如果有的话)。
此处,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]