выражения именованных классов, возвращающие разные значения - PullRequest
0 голосов
/ 17 января 2019

Я хочу знать, почему существует разница между выходами следующих классов.

Я попытался следующий код, чтобы получить значения класса в консоли. Для одного конкретного случая (последняя консоль) мне интересно, как это возвращает это значение.

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: rectangle2]

Ответы [ 3 ]

0 голосов
/ 17 января 2019

почему оно возвращает это значение в виде массива с одним элементом, т.е. [Function: rectangle2]?

Это не массив. Это просто, как объекты в JavaScript регистрируются:

 console.log(
   {}, // [Object object]
   new Map, // [Object Map]
   function() {}, // [Function]
 );
0 голосов
/ 17 января 2019

Почему он возвращает это значение в виде массива с одним элементом, т.е. [Function: rectangle2]

Он не регистрирует массив, это просто странное консольное форматирование любой среды, которую вы используете. Ничто из этого не является допустимым синтаксисом JS, не ожидайте, что скобки ссылаются на массив. Вы можете попытаться записать фактический массив, содержащий функцию, и сравнить вывод.

0 голосов
/ 17 января 2019

В последнем случае вы регистрируете функцию, но не вызываете ее. Под капотом классы - это просто функции. Когда вы вызываете его, он создает экземпляр этого класса; если вы ссылаетесь на него, не вызывая его, то вы ссылаетесь на функцию , а не на экземпляр. Рассмотрим следующий похожий пример:

function doSomething() {
    return 4;
}
console.log(doSomething()); // Says 4
console.log(doSomething); // Says it's a function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...