2017-02-07 6 views
1

Array.prototype自体は空の配列を返します。すべての関数はどこから来ますか?Array.prototype関数はどこから来たのですか?

なぜ私はArray.prototype.sortのような関数を呼び出すことができますが、Array.prototypeでもオブジェクトではありませんか?

Array.prototype.__proto__はオブジェクトです。

Function.prototypeの場合も同じ質問があります。

+2

「Array.prototype」はなぜオブジェクトではないと思いますか?配列(と関数)は両方ともJSのオブジェクトです。 –

答えて

0

さらにArray.prototypeはオブジェクトではありませんか?

どのように考えましたか?これはオブジェクトです:

このように、他のすべてのオブジェクトと同様のプロパティを持つことができます。そして、それはない:これは、他のすべてのアレイに対して同じである

Array.prototype.hasOwnProperty("sort") // true 
Array.prototype.sort // function(compare) { … } 

、あなたはすべてのjavascriptオブジェクトのようにそれらの上にカスタムプロパティを作成することができます

var foo = []; 
foo.bar = "baz"; 
typeof foo.bar // "string" 
Array.isArray(foo) // true 
+0

ご意見ありがとうございます。 はい 'typeof Array.prototype'は" object "を返しますが、Array.isArray(Array.prototype)はtrueを返します。これは配列ネイティブであることを意味しますか?どのように関数を配列から検索することができますか? –

+1

すべての配列は、特別な振る舞いをする 'length'プロパティ(場合によってはいくつかのエンジンの最適化)を持つオブジェクトですが、それ以外の点では標準のjsオブジェクトです。 – Bergi

+0

私は参照してください。なぜ 'Array.prototype'に配列や関数の代わりに単純なキー/値オブジェクトが含まれていないのですか?キー/値のハッシュテーブルとして配列を使用すると良い練習ではないと聞きます。 –

2

Array.prototypeはオブジェクトであり、あなたが使用されるほとんどの機能配列はそれから来る。したがって、プロトタイプです。

クロムデベールバーを開き、下の画像のようにチェックしてください。

enter image description here

+1

+1は 'console.debug'(残念ながら標準ではありません)です。補足: 'Array.prototype.sort'は[console.log]に表示されません。[enumerable property](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/)ではないからです。オブジェクト/ defineProperty#の説明)。 'Array.prototype.propertyIsEnumerable(" sort ")'でチェックしてください。 'console.log'実装は[' Object.keys'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)を使用しています。 docs、* Object.keys()メソッドは、与えられたオブジェクト自身の列挙可能なプロパティの配列を返します。* – mrlew

+0

xdazz、あなたのコメントをありがとうございます。はい、私はクロムコンソールでチェックし、私は質問があります。 Array.prototypeを呼び出すと、Array [0]または[]と表示されます。 'Array.isArray(Array。プロトタイプ) 'が真を返します。 Arrayは組み込みオブジェクトの1つで、オブジェクトになります。 –

関連する問題