2017-02-03 9 views
0

昨日、ポスターが配列の内容の大文字小文字をどのように変換するかを質問していました。私は、私は次のようにマップするための関数への参照を渡すことができることを知っている:私は仕事をマップするためにUpperCaseを渡さないのはなぜですか?

function appendText (el){ 
    return el += ' - appended text'; 
} 

['a','b'].map(appendText); //["a - appended text", "b - appended text"] 

しかし、私は

array.map(String.toUpperCase); 
array.map(String.prototype.toUpperCase); 

と試みたとき、私はエラーが出ることがような音になり

Uncaught TypeError: String.prototype.toUpperCase called on null or undefined

メソッドが渡されていませんmap、私はそれを理解すると、渡すだろう。なぜこれは機能しませんか?

+3

'appendText'は' toUpperCase'が文字列になるしないように、引数を期待する(appendText(a)で示すように)最初のパラメータとして値を名前で関数を実行します'this'はマップから要素を取得しますが、使用するようには設計されていません。これは 'stuff 'として使われます。toUpperCase()' String.toUpperCase(' stuff ') 'ではありません。 – GillesC

+0

' array.map(s => s.toUpperCase()) 'を試してください。 – hsfzxjy

+0

@hsfzxjyそれは大文字の配列ですそれは問題ではありません。 – 1252748

答えて

1

prototype /拡張メソッドには何も渡していません。単に矢印関数を使用して配列項目の値を渡します。

質問の背後にあるロジックに答えるには、コンテキストレスの(つまり、thisの)プロトタイプメソッド(つまり、Stringクラスのクラス)を渡すことはできません。 map

function appendText (el){ 
 
    return el += ' - appended text' 
 
} 
 

 
var array = ['a','b'] 
 

 
console.log(array.map(appendText)) 
 
console.log(array.map(a => appendText(a))) 
 
console.log(array.map(a => a.toUpperCase()))

+0

downvoteに行く場合は、正しい出力と' prototype'メソッドを渡すことができない理由の点で、これが答えられると思うので、コメントしてください。 – G0dsquad

+0

'私があなたの質問に答えると感じるように、あなたがdownvoteに行こうとしているのかどうかコメントしてください。 – 1252748

+0

申し訳ありませんでしたら、私は@hsfzxjyの上記のコメントに基づいています。私のコメントをより明確に編集しました... – G0dsquad

関連する問題