Node.js `[Function]`和`[Function:Object]`有什么区别?

Node.js `[Function]`和`[Function:Object]`有什么区别?,node.js,Node.js,产出: var Cls = function(){} var inst = new Cls() var obj = {} console.log(inst.constructor) console.log(obj.constructor) [Function]和[Function:Object]有什么区别?简短回答:Javascript没有类,它有可以实例化的函数。var-Cls是一个匿名函数;对象是一个命名函数 长答覆: Javascript函数可以实例化以创建对象,类似于在其他正式面向对

产出:

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

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

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

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

长答覆:

Javascript函数可以实例化以创建对象,类似于在其他正式面向对象语言中实例化类的方式

也就是说,您看到的是使用匿名函数的结果

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

第二行显示它是从对象函数创建的

这里有两个变体可以更好地说明我的观点:

[Function]
[Function: Object]
现在应该准确地显示

var Cls = function Cls(){};
var inst = new Cls();
同样,你也可以这样做

[Function: Cls]
类似于

var obj = new Object();

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

长答覆:

Javascript函数可以实例化以创建对象,类似于在其他正式面向对象语言中实例化类的方式

也就是说,您看到的是使用匿名函数的结果

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

第二行显示它是从对象函数创建的

这里有两个变体可以更好地说明我的观点:

[Function]
[Function: Object]
现在应该准确地显示

var Cls = function Cls(){};
var inst = new Cls();
同样,你也可以这样做

[Function: Cls]
类似于

var obj = new Object();

函数可以有一个不可变的名称,该名称与可能引用该函数的任何变量的名称无关。函数名(如果有)是其定义的一部分:

var obj = {}
当节点的console.log记录函数时,输出将包括函数名(如果有)

这里,obj.constructor是对象构造函数,它的名称恰好是Object,也就是说,它是由函数Object{…}定义的。但是,您的Cls函数没有名称,即它是由匿名函数{}定义的。如果为该函数命名,您将看到console.log报告该函数:

这将产生以下输出:

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

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

函数可以有一个不可变的名称,该名称与可能引用该函数的任何变量的名称无关。函数名(如果有)是其定义的一部分:

var obj = {}
当节点的console.log记录函数时,输出将包括函数名(如果有)

这里,obj.constructor是对象构造函数,它的名称恰好是Object,也就是说,它是由函数Object{…}定义的。但是,您的Cls函数没有名称,即它是由匿名函数{}定义的。如果为该函数命名,您将看到console.log报告该函数:

这将产生以下输出:

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

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