私は_.isFunction()
関数のソースを読んと、この行を見た中で使用typeof演算(/./)==「関数」:理由です
if (typeof (/./) !== 'function') {
をし、それは、理由は私は理解していません!そこ。 /./
は常にobject
のように見える正規表現です。なぜ_.isFunction
はになりましたかタイプがfunction
の場合を再定義しませんでしたか?様々なJavaScriptのエンジンの
私は_.isFunction()
関数のソースを読んと、この行を見た中で使用typeof演算(/./)==「関数」:理由です
if (typeof (/./) !== 'function') {
をし、それは、理由は私は理解していません!そこ。 /./
は常にobject
のように見える正規表現です。なぜ_.isFunction
はになりましたかタイプがfunction
の場合を再定義しませんでしたか?様々なJavaScriptのエンジンの
一部のバージョンではが.exec()
を使用する別の方法としてRegExp
を呼び出すために許可されています:彼らがいたことから、
var pattern = /./;
pattern('abc');
pattern.exec('abc');
そしてコーラブル、typeof
considered them function
s:の
タイプval:オブジェクト(ネイティブまたはホストで[[Call]]を実装しています)
結果:"function"
私の知る限り、現在のバージョンはこの動作を示さず、TypeError
を投げます。しかし、下位互換性に懸念がある場合、Underscoreのように、それを確認する必要があります。
@ruakhエンジンは、[[[Call]] '](http://es5.github.io/#x15.3.4.5.1)を使用していない限り、それらを呼び出し可能にする。あなたは例を知っていますか? –
おっと、申し訳ありませんが、Dogbertがリンクしている答えを誤解し、Firefox 3.6.13がこのようなエンジンを使用していると考えました。だから私の上記のコメントは(おそらく)間違っています。私はそれを削除します。 – ruakh
ここで答える:http://stackoverflow.com/questions/5054352/why-use-typeof-for-identifying-a-function/5054396#5054396 – Dogbert
ああ、それでは、誤って正規表現を関数と見なすことを避けることですか?ニース。優れた質問。 – ZenMaster
"なぜ_.isFunctionを定義しないのですか" - それは再定義されています。オリジナルのtoString()定義は2ブロック上にあります。 – Rup