2016-07-08 6 views
1

私は基本的な呼び出しを知っていて、array.prototype.map.call()関数は2つの引数をとります。最初のものは呼び出された内部でこれとして使用されるオブジェクトコンテキストですMDNでは、callメソッドでarray.prototype.mapが使用され、文字列が最初の引数として渡される例が見つかりました。呼び出すことによってarray.prototype.mapを使用する

マップ関数内で渡された文字列がどのように操作されるのか知りたいです。このキーワードはマップ関数内にありません。地図ではそれが呼び出されていることがわかりますか?

var map = Array.prototype.map; 
var a = map.call('Hello World', function(x) { return x.charCodeAt(0); }); 
+1

* "マップ関数内にこのキーワードはありません" * - 私はあなたが '.map()'に引数として渡す関数と '.map()'関数自体を混同していると思います。 – nnnnnn

+0

'Array#map'の' polyfill'を調べると、 'this'の' length'を考慮して 'while'ループを処理していることがわかり、' this'は 'String 'これは' length'プロパティを持っています... – Rayon

+0

'map'関数が' this'引数を使わなかったのはなぜですか? – Bergi

答えて

4

ストリングは、内部次の形式で表されます:それはキーとインデックスとlength性を有するので、これはこれをマッピングするために渡されるだから

String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "w", 7: "o", 8: "r", 9: "l", 10: "d", length: 11, [[PrimitiveValue]]: "hello world"} 

は、実際にアレイとして扱われます。 Array.prototype.mapは、配列を返して、 Function.prototype.callメソッドで渡された文字列で呼び出されます。

コンソールでnew String('hello world')を試してください。

関連する問題