検索
ホームページウェブフロントエンド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() を呼び出すことができます。$ はプロトタイプ オブジェクトに復元されます。現時点では、$ を通じてプロトタイプ メソッドを使用できます。

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

var _$ = window.$、_jQuery= window.jQuery
noConflict:function(deep){
window.$ = _$;
if(deep) window.jQuery = _jQuery;
jQuery を返します。
}

2. オブジェクト拡張子 :

名前空間オブジェクトができたので、機能を拡張する必要があります。例: オブジェクト A のすべてのプロパティとメソッドをオブジェクト B にコピーする必要があります。 B オブジェクトに 1 つずつコードを記述する必要はありません。

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

関数 mix(ターゲット, ソース){
var args = [].slice.call(引数),i=1,
IScover = Typeof ARGS [ARGS.Length-] == "Boolean"? Args.pop (): True; // 書き込みません。デフォルトは true で、デフォルトはカバーされます。
if(args.length == 1){ target = !this.window? this:{};
//オブジェクトパラメータが 1 つだけの場合は、このオブジェクトを展開します。たとえば、A オブジェクトのコンテキストで mix(B) を呼び出します。すると、これは A なので、B のプロパティとメソッドが A オブジェクトに追加されます。ただし、mix(B) が wi​​ndow で呼び出された場合、B オブジェクト内のプロパティとメソッドは空のオブジェクトに追加され、window オブジェクト内の同じ名前のプロパティとメソッドが上書きされないように空のオブジェクトが返されます。 (window オブジェクトのみ window 属性を持ちます)
i =0;
}
while((source = args[i ])){
for(ソース内のキー){
If (iSCOVER ||! (Key in target) // カバーされている場合は、直接割り当てられます。カバーされていない場合は、まずキーがターゲット オブジェクト内にあるかどうかを判断し、キーが存在する場合はキーを割り当てません。値
{
ターゲット[キー] = ソース[キー];
}
}
}
ターゲットを返す;
}

大企業の面接官は、配列の重複チェックについてよく質問します。配列内の各項目はオブジェクトである可能性がありますが、オブジェクト A とオブジェクト B は同じプロパティとメソッドを持っていますが、それらは同じではありません。等しい。 123 や「123」などの文字列と数字については、オンラインで検索すると完全な方法が見つかります。

3. 配列化 :

ブラウザーには、引数、document.forms、document.links、form.elements、document.getElementsByTagName、childNodes など (HTMLCollection、NodeList) など、配列のようなオブジェクトが多数あります。

特別な方法で書かれたカスタムオブジェクトもあります

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

var arrayLike = {
0:"a"、
1:"b"、
長さ:2
}

このオブジェクトの記述方法は、jQuery オブジェクトの記述方法と同じです。

上記の配列のようなオブジェクトを配列オブジェクトに変換する必要があります。

[].slice.call メソッドでこの問題を解決できます。ただし、旧バージョンのIEにおけるHTMLCollectionやNodeListはObjectのサブクラスではないため、[].slice.callメソッドは使用できません。

それで、slice メソッドをオーバーライドできます。

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

A.slice = window.dispatchEvent ? function(nodes,start,end){ return [].slice.call(nodes,start,end); //ウィンドウにdispatchEvent属性があれば、[].slice.callメソッドとケイパビリティ検出をサポートしていることが証明される。
:function(nodes,start,end){
var ret = [],n=nodes.length;
​​​​ Start = PARSEINT (Start, 10) || 0; // 開始値が存在しない場合、または数値でない場合は、0 が割り当てられます。 end = end == 未定義 ? if(start if(end if(end>n) end = n;
for(var i = start;i RET [I-Start] = NODES [i] // 下位バージョンの IE は配列代入の形式を使用します
;                                                                                                                                                                                                                                                                 }
return ret;
}




4. 型判定
:
js の 5 つの単純なデータ型は、null、unknown、boolean、number、string です。

オブジェクト、関数、正規表現、日付、人物などのカスタム オブジェクトなど、複雑なデータ型もあります。

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 で型を決定するために使用されるメソッド:

コードをコピー

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

class2type ={}
jQuery.each("ブール数値文字列関数配列日付 RegExp オブジェクト".split(" "),function(i,name){
class2type [ "[オブジェクト " name "]" ] = name.toLowerCase();
//class2type = {"[object Boolean]":boolean,"[object Number ]":number ,"[object String ]":string ,"[object Function ]":function ,"[object Array ]":array 。 .....}
});
jQuery.type = function(obj){ //obj が null 、未定義な​​どの場合は、文字列「null」、「未定義」を返します。そうでない場合は、toString メソッドを呼び出し、呼び出せるかどうかを判断し、オブジェクト (以前のバージョンの IE では window や Dom などの ActiveXobject オブジェクト) を返します
return obj == null ? : class2type [ toString.call(obj) ] || "オブジェクト";
}

5.domReady

js が dom ノードを操作する場合、ページは dom ツリーを構築する必要があります。したがって、通常は window.onload メソッドが使用されます。ただし、onload メソッドは、すべてのリソースがロードされるまで実行されません。ユーザー操作に対するページの応答を速くするには、DOM ツリーの構築後に js 操作を使用するだけで済みます。すべてのリソース (写真、フラッシュ) がロードされるまで待つ必要はありません。

そのため、Dom ツリーの構築後にトリガーされる DOMContentLoaded イベントが表示されます。ただし、古いバージョンの IE はそれをサポートしていないため、ハックが存在します。

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

if(document.readyState === "complete"){ //Dom ドキュメントがロードされた後にのみ js ファイルがロードされる場合。このとき、この判定により fn メソッド(実行したいメソッド)が実行されます。ドキュメントがロードされた後、document.readyState の値は complete
になるためです。 setTimeout(fn); setTimeout(fn);ここでは jQuery での使い方を説明しますが、理解する必要はありません。
}
else if(document.addEventListener){//DOMContentLoaded イベントをサポートします
document.addEventListener("DOMContentLoaded",fn,false) // バブル
; window.addEventListener("load",fn,false); //DOM ツリーの構築後に js ファイルがロードされる場合。この時点では、DOMContentLoaded イベントはトリガーされません (トリガーされています)。ロード イベント
のみがトリガーされます。 }
それ以外{
document.attachEvent("onreadystatechange",function(){//IE での iframe セキュリティでは、onload の実行が優先される場合とそうでない場合があります。
if(document.readyState ==="complete"){
fn();
}
});
window.attachEvent("onload",fn); //他の監視イベントが取得されない場合でも常に機能するため、少なくとも fn メソッドは onload イベントを通じてトリガーできます。
var top = false;//iframe
内にあるかどうかを確認します Try{//window.frameElement は、このページを含む iframe またはフレーム オブジェクトです。そうでない場合は null です。
top = window.frameElement == null && document.documentElement;
}キャッチ(e){}
If(top && top.doScroll){ //iframe がなく IE の場合
(関数 doScrollCheck(){
試してみる{
top.doScroll("left");//IEではDomツリーが構築されていればhtmlのdoScrollメソッドを呼び出すことができます
}catch(e){
Return settimeout (doscrollcheck, 50); // ビルドされていない場合は、
のリッスンを続行します。 }
fn();
})
}
}

fn メソッドには、すべてのバインドされたイベントの削除が含まれている必要があります。

もちろん、IE でもスクリプト遅延ハックを使用できます。原則として、遅延が指定されたスクリプトは、DOM ツリーが構築されるまで実行されません。ただし、これには追加の js ファイルを追加する必要があり、別のライブラリで使用されることはほとんどありません。

使用原則: ドキュメントに script タグを追加し、script.src = "xxx.js" を使用してスクリプトの onreadystatechange イベントをリッスンし、this.readyState == "complete" のときに fn メソッドを実行します。

つまり、DOM が構築された後、xxx.js が実行され、その this.readyState が完了します。

上記は、JavaScript フレームワーク設計の第 1 章の読書メモです。この章の基本的な内容を誰もがよりよく理解できるように、内容は比較的簡潔です。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
es6数组怎么去掉重复并且重新排序es6数组怎么去掉重复并且重新排序May 05, 2022 pm 07:08 PM

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

JavaScript的Symbol类型、隐藏属性及全局注册表详解JavaScript的Symbol类型、隐藏属性及全局注册表详解Jun 02, 2022 am 11:50 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

原来利用纯CSS也能实现文字轮播与图片轮播!原来利用纯CSS也能实现文字轮播与图片轮播!Jun 10, 2022 pm 01:00 PM

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

JavaScript对象的构造函数和new操作符(实例详解)JavaScript对象的构造函数和new操作符(实例详解)May 10, 2022 pm 06:16 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

JavaScript面向对象详细解析之属性描述符JavaScript面向对象详细解析之属性描述符May 27, 2022 pm 05:29 PM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

javascript怎么移除元素点击事件javascript怎么移除元素点击事件Apr 11, 2022 pm 04:51 PM

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

foreach是es6里的吗foreach是es6里的吗May 05, 2022 pm 05:59 PM

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

整理总结JavaScript常见的BOM操作整理总结JavaScript常见的BOM操作Jun 01, 2022 am 11:43 AM

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 中国語版

SublimeText3 中国語版

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