`[Function]`和`[Function:Object]` - 有什么区别?

时间:2015-03-30 13:26:57

标签: node.js

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

console.log(inst.constructor)
console.log(obj.constructor)

输出:

[Function]
[Function: Object]

[Function][Function: Object]之间有什么区别?

2 个答案:

答案 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.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]