JavaScript デザイン パターン セキュリティ サンドボックス mode_js オブジェクト指向
名前空間
JavaScript 自体は名前空間メカニズムを提供していないため、さまざまな関数、オブジェクト、変数名によるグローバル空間の汚染を避けるために、通常のアプローチはアプリケーションに一意の名前空間を作成することです。またはライブラリを選択し、すべてのメソッドとプロパティをこのオブジェクトに追加します。
/* BEFORE: 5 グローバル */
/ / コンストラクター
function Parent() {}
function Child() {}
// 変数
var some_var = 1;
// いくつかのオブジェクト
var module1 = {} ;
module1.data = {a: 1, b: 2};
var module2 = {}; AFTER: 1 グローバル */
// グローバル オブジェクト
var MYAPP = {};
// コンストラクター
MYAPP.Parent = function() {};
MYAPP.Child = function() {}; .some_var = 1;
// オブジェクト
MYAPP.modules = {};
// ネストされたオブジェクト
MYAPP.modules.module1 = {}; data = { a: 1, b: 2};
MYAPP.modules.module2 = {};
コード リスト 1: 従来の名前空間モード
通常、これは名前の競合を避けるためのより良い方法であり、多くのアプリケーション プロジェクトで使用されます。しかし、このアプローチにはいくつかの欠点があります。
1. 追加する必要があるすべての関数と変数にプレフィックスを追加する必要があります。
2. グローバル オブジェクトは 1 つだけであるため、コードの一部がグローバル オブジェクトを任意に変更し、コードの残りの部分が受動的に更新される可能性があることを意味します。
グローバル コンストラクター
このコンストラクターを Sandbox() と名付けました。また、コールバック関数を渡すこともできます。このコールバック関数は、コードを保存する独立したサンドボックス環境です。
コードをコピー
コード リスト 2: サンドボックスの使用
1. サンドボックスの作成時に「new」演算子を使用することはできません
2. Sandbox() コンストラクターは、追加の構成パラメーターをいくつか受け入れます。 object コードをよりモジュール化したいモジュールの名前。
上記の機能を使用して、オブジェクトを初期化する方法を見てみましょう。
リスト 3 は、「new」演算子を必要とせずに「ajax」モジュールと「event」モジュールを呼び出すオブジェクトを作成できることを示しています。 >
コードをコピー
コードは次のとおりです:
コードをコピー
コードは次のとおりです。
コードをコピーします
コードは次のとおりです:
コード リスト 5: 利用可能なモジュールの呼び出し
コード リスト 6 は、サンドボックス オブジェクトを複数回初期化でき、それらをネストすることもできることを示しています。
コードをコピーします
コードは次のとおりです。
Sandbox('dom', 'event', function(box){
// dom とevent を操作します
Sandbox('ajax', function(box) {
//別のサンドボックス化された「ボックス」オブジェクト
// この「ボックス」は
// この関数の外側の「ボックス」
//...
// Ajax で実行
});
// ここには Ajax モジュールの痕跡はありません
});
コード リスト 6: ネストされたサンドボックス インスタンス
上記の例から、サンドボックス モードを使用すると、すべてのコード ロジックをコールバック関数でラップすることにより、必要なさまざまなモジュールに応じてさまざまなインスタンスが生成され、これらのインスタンスは相互に干渉することなく独立して動作するため、グローバルな名前空間が保護されることがわかります。
次に、Sandbox() コンストラクターを実装する方法を見てみましょう。
モジュールの追加
メイン コンストラクターを実装する前に、Add モジュールをSandbox() コンストラクター。
Sandbox() コンストラクター関数もオブジェクトであるため、「modules」と呼ばれる属性を追加できます。この属性は、キーと値のペアのセットを含むオブジェクトになります。各ペアはキーです。 -value Key は登録する必要があるモジュールの名前で、Value はモジュールのエントリ関数です。コンストラクターが初期化されると、現在のインスタンスが最初のパラメータとしてエントリ関数に渡されます。関数はインスタンスとメソッドに追加の属性を追加できます。
コード リスト 7 では、「dom」、「event」、「ajax」モジュールを追加しました。
Sandbox.modules = {} ;
Sandbox.modules.dom = function(box) {
box.getElement = function() {};
box.getStyle = function() {}; ";
};
Sandbox.modules.event = function(box) {
// 必要に応じてサンドボックス プロトタイプにアクセスします:
// box.constructor.prototype.m = "mmm" ;
box.attachEvent = function(){};
box.dettachEvent = function(){};
Sandbox.modules.ajax = function(box) { .makeRequest = function() {};
box.getResponse = function() {};
コード リスト 7: 登録モジュール
コード リスト 8 では、いくつかの重要な点を含めてコンストラクターの実装方法を説明します。
1. これがサンドボックスのインスタンスであるかどうかを確認します。そうでない場合は、次のことが証明されます。サンドボックスは新しいオペレーター呼び出しではないため、コンストラクターとして再度呼び出します。
2. コンストラクター内で this に属性を追加できます。また、コンストラクターのプロトタイプに属性を追加することもできます。
3. モジュール名は、配列、独立パラメータ、ワイルドカード文字「*」など、さまざまな形式でコンストラクタに渡されます。
4. この例では、外部ファイルからモジュールをロードする必要はありませんが、YUI3 などのシステムでは、基本モジュール (シードと呼ばれることが多い) のみをロードでき、他のすべてのモジュールはロードできることに注意してください。外部ファイルからロードされます。
5. 必要なモジュールがわかったら、それらを初期化します。これは、各モジュールのエントリ関数を呼び出すことを意味します。
6. コールバック関数は最後にパラメータとしてコンストラクタに渡され、最後に生成されたインスタンスを使用して実行されます。
コードをコピー

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

エントリーレベルのタイプスクリプトチュートリアルをマスターしたら、TypeScriptをサポートするIDEで独自のコードを作成し、JavaScriptにコンパイルできるはずです。このチュートリアルは、TypeScriptのさまざまなデータ型に飛び込みます。 JavaScriptには、NULL、未定義、ブール値、数字、文字列、シンボル(ES6によって導入)とオブジェクトの7つのデータ型があります。 TypeScriptはこれに基づいてより多くのタイプを定義し、このチュートリアルではすべてを詳細に説明します。 ヌルデータ型 JavaScriptのように、Typescriptのnull
