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) が window で呼び出された場合、B オブジェクト内のプロパティとメソッドは空のオブジェクトに追加され、window オブジェクト内の同じ名前のプロパティとメソッドが上書きされないように空のオブジェクトが返されます。 (window オブジェクトのみ window 属性を持ちます)
i =0;
}
while((source = args[i ])){
for(ソース内のキー){
If (iSCOVER ||! (Key in target) // カバーされている場合は、直接割り当てられます。カバーされていない場合は、まずキーがターゲット オブジェクト内にあるかどうかを判断し、キーが存在する場合はキーを割り当てません。値
{
ターゲット[キー] = ソース[キー];
}
}
}
ターゲットを返す;
}
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
; }
return ret;
}
4. 型判定
:
オブジェクト、関数、正規表現、日付、人物などのカスタム オブジェクトなど、複雑なデータ型もあります。
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 章の読書メモです。この章の基本的な内容を誰もがよりよく理解できるように、内容は比較的簡潔です。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

Dreamweaver Mac版
ビジュアル Web 開発ツール

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

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

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

ホットトピック



