Я искал многие существующие темы, но ни одна из них не была достаточно конкретной, чтобы точно определить, в чем именно мои сомнения. Просто для обучения. Я создал функцию конструктора с единственной целью - использовать ее в качестве цели функции 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, не должен делать то же самое? Почему дисплей в прямых скобках?