関数がネイティブコードであるかどうかを確認する必要がある状況に常に遭遇します。これは機能テストにおいて非常に重要なコンテンツです。ブラウザがサポートするか、サードパーティのクラスライブラリを通じてシミュレートされたブラウザによってサポートされています。これを検出するために、最も簡単な方法は、もちろん、関数のToString法によって返された値を判断することです。
JavaScriptコード
実際、関数がネイティブであるかどうかを判断するのは非常に簡単です。
//ネイティブ関数関数isNative(fn){// example:// alert.tostring()// "function alert(){[native code]}" // '' + fnは、jsの暗黙的な型変換を利用します。 return(// {/s*/[ネイティブコード/]/s*/}/)。test( '' + fn); }関数を文字列表現に変換し、定期的なマッチングを実行します。これが実装の原則です。
アップグレードバージョン、更新!
;(function(){//オブジェクトのトストリング方法を取得します。パラメーターで渡された値の内部(内部)を処理するために使用される `[[class]]` var tostring = object.prototype.tostring; //原始的な機能のトストリング法を取得します。 (ホストコンストラクター)、//(Safari> 4;本当に出力特定の配列固有)var rehostctor =/^/[object。 +?constructor/] $/; string(toString)//正規表現に関連するすべての特殊文字をエスケープします(/[。^$ {}()| [/] ///]/g、 '// $&')//テンプレートの普遍性を維持するために、 `。*???メソッドのパラメーターの。 .replace(/toString |(function)。*?(?= ///()| for。 +?(?= ///])/g、 '$ 1.*?')// endword + '$'); function isnative(value){// typeof var type = typeof valueのタイプタイプ; return type == 'function' // `function#toString`ネイティブメソッドを使用して呼び出します。 ? renative.test(fntostring.call(value))//タイプが「関数」ではない場合、//ホストオブジェクト(ホストオブジェクト)をチェックする必要があります。間違い; }; // window.isnative = isnativeを必要とする変数/オブジェクトにiSnativeを割り当てることができます。 }());テストコード:
isnative(isnative)// false isnative(alert)// true window.isnative(window.isnative)// false window.isnative(window.alert)// true window.isnative(string.tostring)// true