2016-09-29 11 views
-1

JavaScriptのArray.from()とちょっと混乱します。私は配列のような値を配列に変換すると思いますが、Arrayがオブジェクトであれば、それをインスタンス化するために 'new'キーワードを使用する必要はありませんか?JSでArray.from()を使用

+0

'from'はインスタンス化された配列を満たすインスタンスメソッドではなく、' Array'クラス自体の静的メソッドです。 – Bergi

答えて

0

Arrayは関数、関数はオブジェクト、オブジェクトはプロパティを持ちます。 fromは、そのオブジェクトの単なるプロパティです。 Arrayが関数であり、と呼び出されるという事実は、newで呼び出されるということは無関係です。

例:

function foo() {} 

foo.bar = function() { 
    console.log('hi'); 
} 

foo.bar(); // hi 

おそらくArrayにプロパティとしてfromを追加するための主な理由は、(代わりに別のグローバル関数を作成する)、それを名前空間にあります。

+0

ありがとうございます。しかし、おそらくそれは愚かな質問かもしれませんが、Arrayは静的な関数であり、その配列には型があるので、.from()メソッドも利用できると宣言していますアレイ?その方法を持っていても、配列上では役に立たないだろう...私は全く意味をなしているのだろうか? – Joshua

+1

No.アレイは 'Array.prototype'で定義されたすべてのメソッドを継承し、' Array'ではそれを継承しません。クラスメソッドとして 'Array.from'を考えてみましょう。それはクラスで定義されていて、インスタンスでは定義されていません。上記の例のように、 'var f = new foo();'を実行した場合、 'f'は' bar'メソッドを持たないでしょう。関数とプロトタイプの詳細については、http://felix-kling.de/jsbasics/#/10をご覧ください。 –

+0

2番目の理由は、サブクラス化を許可することかもしれません:-) – Bergi

1

JavaScriptにはいくつかのコレクションタイプ(HTMLCollection、NodeList、FileList、 'arguments'など)があります。後者は、関数に渡されるすべての引数を含む変数です。

イメージングには、通常の配列を使用してデータを渡す必要がある関数があります。その場合、Array.from(..)は他のコレクション型の変換に非常に便利です。