Почему console.log (Firefox) отображает объект с прямыми скобками? - PullRequest
0 голосов
/ 13 сентября 2018

Я искал многие существующие темы, но ни одна из них не была достаточно конкретной, чтобы точно определить, в чем именно мои сомнения. Просто для обучения. Я создал функцию конструктора с единственной целью - использовать ее в качестве цели функции Array (очевидно, для создания массива), а затем использовать ту же функцию, что и у «обычного» конструктора вместе с ключевым словом «new».

function Myray(val0,val1,val2){ 
this[0] = val0;
this[1] = val1;
this[2] = val2;
}
// Not using the 'new' keyword, but the function Array.
var res = Array.call(Myray, 'one', 'two', 'three');

console.log(res);  -->  Array(3) [ "one", "two", "three" ]
console.log(Array.isArray(res));  //  -->  true

Теперь, используя ключевое слово 'new' обычно в том же конструкторе, выдает объект, как и ожидалось, но отображается в квадратных скобках как объект массива.

function Myray(val0,val1,val2){ 
this[0] = val0;
this[1] = val1;
this[2] = val2;
}
var res2 = new Myray('one','two','three');
console.log(res2);  -->  Object(3) [ "one", "two", "three" ]

Вопрос в том, если функция такая же. При вызове функции с Array.call Array заботится только о том, чтобы посмотреть на объект, с которым она вызывается, установить цепочку наследования и создать результирующий тип данных, в данном случае массив. Второй вызов, функция Object, не должен делать то же самое? Почему дисплей в прямых скобках?

1 Ответ

0 голосов
/ 14 сентября 2018

Я пойду с предположением Берги, где консоли браузера могут свободно форматировать по своему усмотрению, учитывая, что функция конструктора имеет целочисленные индексированные свойства. Причина в том, что при запуске кода в терминале Node.js результат отображается в фигурных скобках, что подтверждает мнение Берги. Я должен был сделать это раньше ... Спасибо всем.

...