2011-01-28 11 views
10

最近NodeJSとJavascriptコードをたくさん見ると、引数がArrayのインスタンスではないように見えますが、人々はArray.prototype.slice.call(arguments, ...)または[].slice.call(arguments)のようなものをやっていて、初心者の理解を妨げています。引数がArrayのインスタンスでない理由、またはこれがちょうどその悪い部分ですか?なぜJavascript関数 `arguments`はnode.jsのArrayのインスタンスではありませんか?

答えて

28

argumentsは、ちょうどlengthというプロパティがあり、インデックスに[]を使用できるスタンドアロンオブジェクトです。しかしそれ以外の場合は、それは単なるオブジェクトであり、オブジェクトではありません。

はい、これは確かにJavaScriptの悪い部分の1つです。

+0

私はそれが.calleeなどの追加のプロパティを持っていることを知っていますが、理想的な世界では、プロトタイプをArrayに指摘してはいけません。それでスプライス/スライスが直接その上にあります。私はJSの開発者を撃つことなく、私の理解を明確にするためだけに、誰かが回り、x/y/z(根本的な誤解など)のために自分のアイデアが遅れていると言うでしょう。 –

+0

@mattcodeはい、それ。 JSにはたくさんの欠点があり、これもその一つです。 –

+2

'arguments [0]'などにも代入しないでください。 'arguments [0]'は*あなたの最初の仮パラメータとまったく同じ*です。どちらか一方を変更すると、もう一方も変わります。 –

関連する問題