ホームページ  >  記事  >  ウェブフロントエンド  >  ネイティブ メソッドがnative_javascriptスキルであるかどうかを判断するJSコード

ネイティブ メソッドがnative_javascriptスキルであるかどうかを判断するJSコード

WBOY
WBOYオリジナル
2016-05-16 17:15:561019ブラウズ

ブラウザの傾向は、Worker のようなオブジェクトをどんどん追加すると同時に、古いオブジェクトに新しいメソッドを追加することです。互換性を持たせるための最初のステップは、それらが存在するかどうかを検出することです。存在しない場合は、独自の互換性コードを追加します。この時点で問題が発生します。一部のクラス ライブラリはこの手順を実行しますが、実行しない場合もありますが、標準を満たしていません。したがって、単に typeof Array.prototype.map === "function" だけでは十分ではない可能性があります。このとき、isNativeメソッドが表示されます。

私が使用している、自分で書いたバージョン:

コードをコピーします コードは次のとおりです:

var isNative = function(method){//ネイティブ メソッドかどうかを判断します
return !! method && (/{s*[ネイティブ コード]s*}/.test(method "") ) ||
/ {s*/* ソース コードは利用できません */s*}/.test(method ""));//これは opera9.x との互換性のためです
}

しかし、世界はこのようなものです、私はこの問題を勉強したに違いありません。次は、Safari のネイティブ メソッドの toString 値が実際には非社交的であることを指摘した Diego Perini のバージョンです:
コードをコピー コードは次のとおりです。

var isNative = function(object, method) {
return object && object in object &&
typeof object[method] != ' string' &&
// IE および W3C ブラウザは "[ネイティブ コード]" を返します
// Safari < = 2.0.4 は "[関数]" を返します
(/{s*[ネイティブ コード] s*}|^[関数]$/).test(object[メソッド]);
}

パラメーターがもう 1 つあります私のバージョンよりも、ネイティブ オブジェクトのメソッドを指定できますが、1 つのパラメーターは 2 つのパラメーターとは何の関係もありません。結果は、まだ完全には程遠いことを示しています。これら 2 つの関数の和集合が取られたとしても、それは正しい完全なセットではない可能性があります。

もちろん、これは [ネイティブ コード] やソース コードが利用できない、または [関数] の問題ではありません。JavaScript ではさまざまなメソッドやオブジェクトを簡単にコピーできるからです。たとえば、次のコードは検出コードをうまく騙すことができます。

コードをコピー コードは次のとおりです。

window.test = {
toString : function( ) {
return '[function]';
}
};
isNative(window, 'test') // true

最後にnwmathers から入手しました。 これを見つけます:
コードをコピーします コードは次のとおりです:

var isNative = (function() {
var s = (window.open '').replace(/open/g, '');
return function(object, method) {
var m = object ? object[メソッド] : false, r = new RegExp(method, 'g');
return !!(m && typeof m != 'string' && s === (m '').replace(r 、''));
};
})();
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。