返回不同值的命名类表达式

时间:2019-01-17 14:55:16

标签: javascript ecmascript-6 unnamed-class

我想知道为什么以下类的输出之间存在差异。

我尝试使用以下代码在控制台中获取类值。对于一个特殊情况(最后一个控制台),我想知道这是如何返回该值的。

let rectangle = class{
    constructor(name,num){
        this.name =name;
        this.num =  num;
    }
}

let rect =  new rectangle();
console.log("bantai",rect);
//output: rectangle { name: undefined, num: undefined }


let rectangle3 = class rectangle2{
    constructor(model, version){
        this.model = model;
        this.version = version;
    }
}
var abh =  new rectangle3();

console.log(abh);
//output:rectangle2 { model: undefined, version: undefined }

console.log(rectangle3);
//output:[Function: rectangle2]

我想知道最后一个控制台console.log(rectangle3)的值为什么将这个值作为带有一个元素的数组作为返回值,即[Function:angle2]

3 个答案:

答案 0 :(得分:2)

  

为什么要将此值作为带有一个元素的数组返回,即[Function:rectangular2]?

那不是数组。这就是JavaScript中的对象如何记录的方式:

 console.log(
   {}, // [Object object]
   new Map, // [Object Map]
   function() {}, // [Function]
 );

答案 1 :(得分:1)

  

为什么它将这个值作为带有一个元素的数组返回,即[Function: rectangle2]

它不记录阵列,只是您所使用的任何环境的奇怪控制台格式。这些都不是有效的JS语法,不要指望括号引用数组。您可以尝试记录包含函数的实际数组并比较输出。

答案 2 :(得分:0)

在上一个中,您正在记录该函数,但未调用它。在内部,类只是函数。当您调用一个时,它将创建该类的一个实例。如果您引用一个而不调用它,那么您引用的是 function 而不是实例。考虑以下类似示例:

function doSomething() {
    return 4;
}
console.log(doSomething()); // Says 4
console.log(doSomething); // Says it's a function