ホームページ ウェブフロントエンド jsチュートリアル JavaScript でのコード スニッフィングによるネイティブ オブジェクトとプロトタイプの拡張_JavaScript のヒント

JavaScript でのコード スニッフィングによるネイティブ オブジェクトとプロトタイプの拡張_JavaScript のヒント

May 16, 2016 pm 05:43 PM
プロトタイプ

: 翻訳に不適切な点があった場合は、修正してください。皆様が幸せなダブルホリデーを過ごせることをお祈りしています。
特別なニーズなしにネイティブ オブジェクトやプロトタイプを拡張することは良いことではありません

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

//これは行わないでください
Array.prototype.map = function() {
// 何らかのコード
};たとえば、一部の古いブラウザに ECMAScript5 メソッドを追加するなど、そうする価値があります。
この場合、通常はこれを行います:



コードをコピーします コードは次のとおりです: if (!Array.prototype.map) {
Array.prototype.map = function() {
//コード
}


もっと偏執的な場合は、他の人がマップを true やその他の予期しない値として定義するのを防ぐために、検出コードを次のように変更できます:



コードをコピーします
コードは次のとおりです: if (typeof Array.prototype.map !== "function") { Array.prototype .map = function() {
// 一部のコード
}


(ただし、これは他の開発者のマップ定義を壊し、その関数の実装に影響します)
ただし、敵対的で競争的な環境では (つまり、JS ライブラリを提供または使用する場合)、誰も信頼すべきではありません。他の人の JS コードが自分の JS コードより先にロードされ、ES5 と完全に互換性のない Map() メソッドが何らかの理由で定義されていて、コードが適切に実行されなくなった場合はどうすればよいでしょうか。

ただし、Webkit カーネルが map() メソッドを実装している場合は、このメソッドが確実に正常に実行されるので安心してください。それ以外の場合は、コードを使用して検出する必要があります。

幸いなことに、これは JavaScript で簡単に実装できます。ネイティブ関数の toString メソッドを呼び出すと、関数の関数本体が [ネイティブ コード] として返されます。
たとえば、Chrome コンソールで:




コードをコピーします
コードは次のとおりです: > ; Array.prototype.map.toString(); "function map() { [ネイティブ コード] }"
適切なコード検査は常に少々不快なものです。ブラウザによってスペースや改行の扱いが軽すぎるためです。テストは次のとおりです:



コードをコピーします
コードは次のとおりです: Array.prototype .map.toString() .replace(/s/g, '*'); // "*function*map()*{*****[ネイティブ*コード]*}*" // IE // " function*map()*{*****[native*code]*}" // FF
// "function*map()*{*[native*code]*} " // Chrome


s を削除するだけで、より実用的な文字列になります:



コードをコピー
コードは次のとおりです。 Array.prototype.map.toString().replace(/s/g, ''); // "functionmap(){[nativecode] }"
これを再利用可能な shim() 関数にカプセル化すると、次のようなすべての操作を繰り返す必要がなくなります。

Array.prototype... など操作。この関数は、パラメーターとしてオブジェクト (たとえば、Array.prototype)、追加されるプロパティ (たとえば、「map」)、および追加される関数を受け入れます。



コードをコピー
コードは次のとおりです。 function shim(o, prop, fn) { var nbody = "function" prop "(){[nativecode]}"; if (o.hasOwnProperty(prop) &&
o[prop].toString().replace(/s/ g, ' ') === nbody) {
//テーブル名はネイティブです。
return true;
}
//新しく追加された
o[prop] = fn;
}


テスト:



コードをコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

原神バージョン 4.4 の新しいマップの紹介 原神バージョン 4.4 の新しいマップの紹介 Jan 31, 2024 pm 06:36 PM

原神 バージョン 4.4 の新しいマップの紹介. 皆さん、原神 4.4 バージョンでは、立月のシー ランタン フェスティバルも始まりました. 同時に、バージョン 4.4 では神羽渓谷と呼ばれる新しいマップ エリアが開始されます。提供された情報によると、沈雨谷は実際には喬営村の一部ですが、プレイヤーはそれを沈雨谷と呼ぶことに慣れています。それでは、新しい地図をご紹介します。原神バージョン 4.4 の新マップのご紹介です。バージョン 4.4 では、立月北部に「陳兪渓谷・上谷」、「陳兪渓谷・南嶺」、「来新山」がオープンします。谷・上谷」。 ※魔神クエスト・第3幕「ドラゴンと自由の歌」プロローグをクリアすると、テレポートアンカーポイントが自動で解放されます。 2. 喬営荘 暖かい春風が再び陳嶼の山野を撫でるとき、香りのよい

プロトタイプとプロトタイプチェーンとは何ですか プロトタイプとプロトタイプチェーンとは何ですか Nov 09, 2023 pm 05:59 PM

js のオブジェクトであるプロトタイプは、他のオブジェクトのプロパティとメソッドを定義するために使用されます。各コンストラクターには、プロトタイプ属性があります。この属性は、プロトタイプ オブジェクトを指すポインターです。新しいオブジェクトが作成されると、新しいオブジェクトは次のようになります。コンストラクターのprototype属性はプロパティとメソッドを継承します。プロトタイプ チェーンでは、オブジェクトのプロパティにアクセスしようとすると、js はまずオブジェクトにこのプロパティがあるかどうかを確認します。そうでない場合、js はオブジェクトのプロトタイプを参照します。プロトタイプ オブジェクトにこのプロパティがない場合は、原型の原型を探し続ける。

Go 言語と Python のパフォーマンス比較: 高パフォーマンス プログラミングに適しているのはどちらですか? Go 言語と Python のパフォーマンス比較: 高パフォーマンス プログラミングに適しているのはどちらですか? Jan 30, 2024 am 08:13 AM

Go 言語と Python は非常に人気のある 2 つのプログラミング言語であり、それぞれに独自の利点と特徴があります。高性能プログラミングに関しても、この 2 つにはいくつかの違いがあります。この記事では、Go 言語と Python を比較して、どちらが高パフォーマンス プログラミングに適しているかを検討します。まず、Go 言語について理解しましょう。 Go 言語は、シンプルさ、効率性、同時実行性に重点を置いて Google によって開発されたオープンソース プログラミング言語です。 Go 言語の設計目標の 1 つは、高パフォーマンスのプログラミング エクスペリエンスを提供することです。軽量のコルーチンがあります (Goro

プロトタイプとプロトタイプチェーンの違いは何ですか プロトタイプとプロトタイプチェーンの違いは何ですか Nov 09, 2023 pm 04:48 PM

プロトタイプとプロトタイプ チェーンの違いは次のとおりです。 1. プロトタイプは、オブジェクト間での属性とメソッドの共有と継承を実現するために使用される、いくつかの共有属性とメソッドを含む各オブジェクトが持つ属性です。一方、プロトタイプ チェーンは継承です。このメカニズムは、オブジェクト間の継承関係を定義するオブジェクト間のプロトタイプ関係を通じて実装され、オブジェクトがプロトタイプ オブジェクトのプロパティとメソッドを共有できるようになります。 2. プロトタイプの機能は、オブジェクトの共有プロパティとメソッドを定義することです。複数のオブジェクトが同じプロトタイプ オブジェクトのプロパティとメソッドを共有できるようにするため、プロトタイプ チェーンの機能はオブジェクト間の継承関係などを実現することです。

適切なプログラミング言語を選択する: Go と Python を比較して、プロジェクトのニーズに最適な選択を決定します 適切なプログラミング言語を選択する: Go と Python を比較して、プロジェクトのニーズに最適な選択を決定します Jan 30, 2024 am 08:00 AM

今日の急速な技術進歩の時代では、プログラミング言語の選択は非常に重要になっています。ソフトウェア開発分野の継続的な発展に伴い、Go言語とPythonは非常に注目を集めている2つのプログラミング言語となっています。この記事では、読者がプロジェクトのニーズに応じて適切なプログラミング言語を選択できるように、Go 言語と Python の比較分析を行います。まず、Go 言語について理解しましょう。 Go 言語は、Google によって開発された静的にコンパイルされたプログラミング言語です。強力な同時処理機能と効率的なガベージ コレクション メカニズムを備えています。

国産の無料プログラミングツールが人気!清華大学の博士チームによって開発され、応答遅延が短く、精度が高いです。 国産の無料プログラミングツールが人気!清華大学の博士チームによって開発され、応答遅延が短く、精度が高いです。 Jan 31, 2024 pm 05:03 PM

昨年、大規模モデル テクノロジーの広範な適用により、私たちは AI が私たちの働き方をいかに大きく変えたかを目の当たりにしてきました。プログラミングの分野でもAIの介入はプログラマーにこれまでにない利便性をもたらすでしょう。最近、Feishen Technology は、大規模な自社開発コード モデルに基づく AI コード アシスタント FittenCode をリリースしました。これにより、プログラマーはコーディング タスクをより迅速、正確、高品質で完了できるようになり、コーディング効率が大幅に向上し、無料でオープンなサービスに貢献できます。ユーザー!製品の公式 Web サイトのアドレス: https://code.fittentech.com/FittenCode は、前回のリリース以来すぐに人気になりました。開発チームは機能を提供するために 24 時間体制で取り組みました。

JSプロトタイプとプロトタイプチェーンの役割は何ですか JSプロトタイプとプロトタイプチェーンの役割は何ですか Nov 09, 2023 pm 04:56 PM

js プロトタイプとプロトタイプ チェーンの機能は、オブジェクトの継承を実現し、メモリ領域を節約し、コードのパフォーマンスと保守性を向上させることです。詳細な導入: 1. オブジェクトの継承を実装します。プロトタイプとプロトタイプ チェーンを使用すると、オブジェクトを作成し、別のオブジェクトのプロパティとメソッドを継承できます。新しいオブジェクトを作成するときに、そのプロトタイプを別のオブジェクトにポイントできるため、新しいオブジェクト オブジェクトは、プロトタイプ オブジェクトのプロパティとメソッドにアクセスできます; 2. メモリを節約し、パフォーマンスを向上させます。JavaScript では、各オブジェクトにプロトタイプがあります。プロトタイプ チェーンを通じて、オブジェクトはプロトタイプなどを共有できます。

プロトタイプとプロトタイプチェーンの特徴は何ですか? プロトタイプとプロトタイプチェーンの特徴は何ですか? Nov 09, 2023 pm 04:38 PM

プロトタイプの特徴は次のとおりです: 1. プロトタイプは、他のオブジェクトと同様にプロパティとメソッドを持つことができる通常のオブジェクトです; 2. オブジェクトが作成されると、プロトタイプは自動的に関連付けられます。新しいオブジェクトを作成すると、JavaScript は自動的にプロトタイプをオブジェクトに割り当て、オブジェクトに関連付けます; 3. オブジェクトは、プロトタイプ チェーンを通じてプロトタイプのプロパティとメソッドにアクセスできます; プロトタイプ チェーンの特徴は次のとおりです。 . 各オブジェクトにはプロトタイプがあり、オブジェクトのプロパティにアクセスする際、オブジェクト自体がプロパティを持たない場合はプロトタイプオブジェクトなどから検索されます。

See all articles