Object.createで作成された配列は、配列のように散りばめられ、配列のように突っ張られますが、実際の配列ではありません。少なくともv8/node.jsで Object.createで作成されたJavascript配列 - 実際の配列ではありませんか?
> 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
を使用する方法がありますか?
あなたの目標には分かりません。 完全にindistingushableにする方法 - 'b = []';を使用してください。 – kirilloid
@kirilloid - これはいくつかの状況では有効なアプローチかもしれませんが、factory関数がprototypeParamに基づく配管を内部的に行うと言う状況では、あなたの提案はオプションではありません。例えば。 monoidの作成では、以下から始めてください:var monad = Object.create(prototypeParam);ここで、prototypeParamがArray.prototype – arcseldon