Массивы Javascript, созданные с помощью Object.create - не настоящие массивы?

Похоже, что массивы, созданные с помощью Object.create, ходят как массивы, а крякают как массивы, но все же не являются настоящими массивами. По крайней мере, с v8 / node.js.

> a = []
[]
> b = Object.create(Array.prototype)
{}
> a.constructor
[Function: Array]
> b.constructor
[Function: Array]
> a.__proto__
[]
> b.__proto__
[]
> a instanceof Array
true
> b instanceof Array
true
> Object.prototype.toString.call(a)
'[object Array]'
> Object.prototype.toString.call(b)
'[object Object]'

Может ли какой-нибудь гуру Javascript объяснить, почему это так и как сделать так, чтобы мой вновь созданный массив был неотличим от реального массива?

Моя цель здесь - клонировать структуры данных, включая массивы, к которым могут быть прикреплены настраиваемые свойства. Конечно, я мог бы вручную присоединить свойства к вновь созданному массиву, используя Object.defineProperty , но есть ли способ сделать это с помощью Object.create ?

8
задан Marco Bonelli 9 December 2015 в 13:12
поделиться