ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript フレームワーク設計の読書ノート シード module_javascript スキル
1. ネームスペース :
js の名前空間は、オブジェクトのプロパティを使用して拡張されます。たとえば、ユーザーは A オブジェクトを定義します。A オブジェクトの下には、B 属性と C 属性が存在します。同時に、B 属性と C 属性もオブジェクトです。したがって、A={B:{},C:{}} の場合、ユーザーは B オブジェクトと C オブジェクトに同じメソッドとプロパティを定義できます。したがって、B と C は異なる名前空間に属します。オブジェクト B および C のメソッドを呼び出すときは、A.B.like() および A.C.like() を通じて呼び出すことができます。もちろん、A は window オブジェクトのプロパティに属します。
しかし、たとえば boke.jsp ページで jquery.js とprototype.js (これらは window オブジェクトに $ 属性を追加します) を導入すると、競合が発生するという状況があります。
したがって、jquery.js には競合を処理するための noConflict() があります。実行プロセス: このとき、プロトタイプは window の $ 属性を占有します。その後、jquery が導入されると、jquery は前のウィンドウの $ 属性を _$ に格納し、$ 属性自体を使用します。現時点では、$ を介して jquery メソッドを呼び出すことができます。今は jquery を使用する必要はないが、プロトタイプを使用したい場合は、$.noConflict() を呼び出すことができます。$ はプロトタイプ オブジェクトに復元されます。現時点では、$ を通じてプロトタイプ メソッドを使用できます。
2. オブジェクト拡張子 :
名前空間オブジェクトができたので、機能を拡張する必要があります。例: オブジェクト A のすべてのプロパティとメソッドをオブジェクト B にコピーする必要があります。 B オブジェクトに 1 つずつコードを記述する必要はありません。
3. 配列化 :
ブラウザーには、引数、document.forms、document.links、form.elements、document.getElementsByTagName、childNodes など (HTMLCollection、NodeList) など、配列のようなオブジェクトが多数あります。特別な方法で書かれたカスタムオブジェクトもあります
このオブジェクトの記述方法は、jQuery オブジェクトの記述方法と同じです。
上記の配列のようなオブジェクトを配列オブジェクトに変換する必要があります。
[].slice.call メソッドでこの問題を解決できます。ただし、旧バージョンのIEにおけるHTMLCollectionやNodeListはObjectのサブクラスではないため、[].slice.callメソッドは使用できません。
それで、slice メソッドをオーバーライドできます。
オブジェクト、関数、正規表現、日付、人物などのカスタム オブジェクトなど、複雑なデータ型もあります。
Typeof は通常、ブール値、数値、文字列を決定するために使用され、instanceof は通常、オブジェクト タイプを決定するために使用されます。しかし、それらにはすべて欠点があります。たとえば、firame の配列インスタンスは親ウィンドウの Array インスタンスではないため、instanceof を呼び出すと false が返されます。 (この質問は360スクール募集時に行われたものです)。 typeof new Boolean(true) // "object" 、パッケージ化オブジェクト。ブール値、数値、文字列の 3 つのパッケージ化オブジェクトがあります。これらについては、js 高度なプログラミングで説明します。多くの人が typeof document.all を使用して IE かどうかを判断します。実際、これは非常に危険です。Google と Firefox もこの属性を好むため、Google Chrome では次のような状況が発生します。 , document.all //HTMLAllCollection, typeofで未定義と判定されるが、この属性値は読み取れる。
ただし、Object.prototype.toString.call メソッドを使用して型を決定できるようになりました。このメソッドはオブジェクト内の[[クラス]]を直接出力できますが、IE8以下のウィンドウオブジェクトにはこのメソッドは使用できません。 IE6、7、8では window == document // true document == window // false を使用できます。
NodeType (1: 要素 2: 属性 3: テキスト テキスト 9: ドキュメント)
jquery で型を決定するために使用されるメソッド:
コードをコピー
5.domReady
js が dom ノードを操作する場合、ページは dom ツリーを構築する必要があります。したがって、通常は window.onload メソッドが使用されます。ただし、onload メソッドは、すべてのリソースがロードされるまで実行されません。ユーザー操作に対するページの応答を速くするには、DOM ツリーの構築後に js 操作を使用するだけで済みます。すべてのリソース (写真、フラッシュ) がロードされるまで待つ必要はありません。
そのため、Dom ツリーの構築後にトリガーされる DOMContentLoaded イベントが表示されます。ただし、古いバージョンの IE はそれをサポートしていないため、ハックが存在します。
fn メソッドには、すべてのバインドされたイベントの削除が含まれている必要があります。
もちろん、IE でもスクリプト遅延ハックを使用できます。原則として、遅延が指定されたスクリプトは、DOM ツリーが構築されるまで実行されません。ただし、これには追加の js ファイルを追加する必要があり、別のライブラリで使用されることはほとんどありません。
使用原則: ドキュメントに script タグを追加し、script.src = "xxx.js" を使用してスクリプトの onreadystatechange イベントをリッスンし、this.readyState == "complete" のときに fn メソッドを実行します。
つまり、DOM が構築された後、xxx.js が実行され、その this.readyState が完了します。
上記は、JavaScript フレームワーク設計の第 1 章の読書メモです。この章の基本的な内容を誰もがよりよく理解できるように、内容は比較的簡潔です。