通常の関数とES6矢印関数の文脈の違いが大きく異なるため、コールバックfnで受け取った関数を知ることができます。コールバック関数がES6矢印であるかどうかを調べる
typeof
returnfunction
(両方とも)です。区別する方法はありますか?
通常の関数とES6矢印関数の文脈の違いが大きく異なるため、コールバックfnで受け取った関数を知ることができます。コールバック関数がES6矢印であるかどうかを調べる
typeof
returnfunction
(両方とも)です。区別する方法はありますか?
矢印機能はコンストラクタとして使用できず、undefined
としてtypeof arrowFunc.prototype
と表示されますが、非矢印機能は「オブジェクト」を示します。
Chromebook Chrome 51.0.2704.103で、 'x = function(){return 1;};で作業していることを確認しました。 y =(()=> 1)。 – Paul
これは[this fiddle](http://www.es6fiddle.net/iqa214ua/)の両方で 'object'を返しています。 。 – daniloprates
hmmm通常の関数にコンパイルしているので、Babelではうまくいきません:/ /しかし、ソリューションのおかげで、コンパイラが問題ではないときには最良の方法と思われます。 – daniloprates
Function.toString()
を使用すると、関数のソースコードの文字列表現を返し、その文字列の矢印(=>
)を検索できます。
var arrowFunc = x => 2 * x
var regFunc = function (x) {return 2 * x}
arrowFunc.toString().indexOf("=>") // 2
regFunc.toString().indexOf("=>") // -1
APIを設計している場合は、両方で一貫して動作するはずです。たとえば、ユーザーがコードをリファクタリングすると考えると、渡された関数に基づいて関数のシグネチャが実際に変更されると思いますか?わたしは・・・しないだろう。また、検出された検出方法は矢印付き矢印機能では失敗する可能性があるので、実行中の環境に応じてコードの動作が変わることに注意してください。 – loganfsmyth
なぜ違いを知りたいのですか? –
コールバックの受信者には全く違いはありません。単純にすべてのタイプのコールバックを呼び出すことができます。 – Bergi