ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の高度なプログラミングの概要

JavaScript の高度なプログラミングの概要

巴扎黑
巴扎黑オリジナル
2017-07-18 17:06:061482ブラウズ


前書き:

この本の半分を注意深く読むのに約 1 週間かかりました。以下は、この本を読んだ人に全体的な理解が得られることを願っています。に。現時点では少し乱雑で包括的ではないかもしれませんが、後で整理して追加します。 (2017-7-17)

第 1 章JavaScriptはじめに

第 2 章 HTML で使用するJavaScript

第 3 章 基本概念

3.1.

構文

大文字と小文字を区別する

識別子(キャメルケースの使用を推奨myCar)

コメント// /**/

strict モード (strict を使用)

ステートメント var diff-a-b; にはセミコロン を使用し、 if( test ) {alert(test) } も使用することをお勧めします。 3.2 キーワードと予約語

3.3 変数

未初期化

未定義 var message = “hi” message = 100;

型は自由に変更可能

Function test(){

Var a = “hi”; 局部

b = “hi”; 全局

}

Test(); エラー alert(b); こんにちは

3.4

データ型

typeof

(

定義されていますが割り当てられていません) ヌル ( Null オブジェクト ポインター

)Boolean(ブール値

tru​​e false フロー制御ステートメントは、対応するboolean変換)Number

(

8進数

0 10進数 16進数0x 浮動小数点値の範囲NaN 数値変換Number parseInt )String(文字列、一重引用符と二重引用符の違いなし、エスケープシーケンス、文字列

toString String)Object(object すべてのオブジェクトの基礎

var o = new Object();)ES

関数はデータ型ではなくオブジェクトです。

3.5

演算子

単項演算子

++ --

,+ -(データ型の変換に使用できます)

bit tor

ビットごとに押すnon-~num1 ビットごとの AND& ビットごとの OR| ビットごとの XOR^ 左シフト<<右シフト> > 符号なし右シフト>>

ブール演算子

! && || 乗算演算子* / % 加法演算子+ - 関係演算子< などの演算子 == != === !== 条件演算子? :

代入演算子 = *= /= %= += -= <<= >>= >>>=

カンマ演算子

3.6 ステートメント

3.7

関数

引数

オーバーロードなし

第4章変数、スコープ、メモリの問題

4.1

基本的な型と参照 型の値動的属性 (参照型は属性を動的に追加できます

)

変数値をコピー (基本型は異なる空間であり、参照型は同じ空間を参照します)

パラメータを渡す (同じ)

Type Types y (Typeof Instanceof)

4.2

実行環境とアクション ドメイン

拡張ドメインチェーン (Try-Catch with) ブロックレベルのスコープなし (の場合) 変数クエリ識別子の宣言)

4.3ガベージコレクション

戦略(参照カウントをクリアにマーク) パフォーマンスの問題 メモリの管理

第5章 参照型

5.1 Objecttype

Var person = {};(関数に多数のパラメータを渡すのに適しています) var parson = new Object(); ["name"](

変数を使用して属性を表す場合は

を使用してください) person.name(

推奨)

5.2 Array

type

Var Colors = new配列(); var Colors = Array(); var Colors =[*****];

Colors[*] = *****; 配列を検出します:

配列.isArray()

変換メソッド:

toString() valueOf() toLocaleString() join()

スタックメソッド:

Push() Pop()

Queueメソッド:シフト() unshift()

並べ替え方法:

reverse() sort(

比較関数のパラメータを追加できます

)

操作方法:concat()前と同じslice()元のインターセプトセグメント

splice()

変更された元のセグメントは削除または追加可能 Positionメソッド: indexOf() lastIndexOf() 項目の位置を返す

反復メソッド:

every() filter() forEach() map() some()

各項目は処理されますが、元の配列は変更されません

Mergeメソッド:

reduce()

順序reduceRight()逆順 2つの項目を最後までたどる

5.3 DateType New Date() Inside

parse(

"May 2 5,2004" ) UTC (2005,0) Date.now()

継承メソッド:

toLocaleString() toString() valueOf()

日付書式設定メソッド:

toDateString() toTimeString() toLocaleDateString( ) toLocal eTimeString ( ) toUTCString()

Date

/

Timeコンポーネントメソッド: 特定の読み取りが多すぎます

5.4RegExp

type

リテラル

var pattern1 = / [bc]at /i ;

Constructor

var pattern2 = new RegExp(" [bc]at ", " i ");

RegExpインスタンス属性

グローバルignoreCase lastIndex複数行ソース

役に立たない

RegExpインスタンスメソッド: exec() キャプチャグループ(一致するアイテムの複数のセットをキャプチャ) text() 一度に一致するかどうかを確認する

RegExpConストラクターの属性: 少し多すぎます。最新の一致の関連情報を表示するために使用されます

このモードの制限: 一部の言語(Perl)でサポートされている高度な正規表現機能が欠けていますが、十分ですほとんどの場合

5.5 Function型 Functionはオブジェクト(Functionのインスタンスでもある)であり、関数名はポインタである。

function sum(num1,num2) { }

Var sum = function(num1,num2){ };

オーバーロードはありません。関数はオブジェクトであり、関数名はポインタ。

関数宣言と関数式: function ******* 関数宣言の昇格 var sum = ******* は昇格されません

内部function 属性: argumentsobject(propertycalleeは関数を指す) thisobject(関数実行の環境オブジェクトを指す) 発信者 (現在の関数の呼び出しを指します。グローバル スコープの関数の場合、値は null)

関数の属性とメソッド:

Attributes

(length宣言された数パラメータ prototypeInherit )

非継承メソッド:

call() apply() binding()

a.apply( b, c); d ); 環境内の

オブジェクト

b 内の関数 a を実行し、 パラメータを a c (引数 または配列 ) / d ( write each item out )

Var a = b.bind(c);

a

c環境オブジェクト で実行される関数です

5.6

基本的なパッケージ化タイプ:

Boolean

タイプ:

var booleanObject = new Boolean(true); Boolean オブジェクトは決して使用しないことをお勧めします。

Number

Type:

varnumberObject = new Number(10); toFixed() toExponential() toPrecision()

Number を直接インスタンス化しないこともお勧めしますタイプ。

String

Type:

var stringObject = new String("hello world")Attribute

;

1.文字メソッド: charAt() または string[] 対応する文字を返す charCodeAt() 対応する文字コードを返す

2. 文字列操作メソッド:

concat() または + 演算子は配列 concat()

Slice() substring() substr() インターセプト文字列、3 つは非常に柔軟です

3.文字列位置メソッド: indexOf() lastIndexOf()

4.trim()メソッド すべての接頭辞と接尾辞のスペースを削除します trimLeft() TrimRight()

5. 文字列の大文字と小文字の変換メソッド

toLowerCase() toUpperCase() 古典的なメソッド

toLocaleLowerCase() toLocaleUpperCase() 特定地域 こちらの方が信頼性が高い

6. 文字列パターン マッチングメソッド。

マッチ( ) は本質的に RegExpexec() と同じで、一致した文字列の配列を返します

search() は最初に一致したインデックスを返します それ以外の場合は に戻ります-1

Replase ()

文字列を照合して置換

Split ()

分割されたパーティションを照合して配列を生成

7.localecompare

8.fromCharCode()

静的メソッド 複数の文字エンコーディングを変換

9.HTML

メソッド 例: big() string

5.7 単一の組み込みオブジェクト

1.グローバル

オブジェクト

URL

エンコード方法:

encodeURI()

全体 encodeURIComponent()

特定の段落のエンコード

decodeURI( ) 全体 decodeURIComponent()

特定セクションのデコード

eval()メソッドは非常に強力で非常に危険ですECMAScript

parser

Globalオブジェクトのプロパティ未定義

配列…… はすべて属性です Webブラウザはwindow

オブジェクト

の一部としてグローバルオブジェクトを実装します

2.Mathオブジェクト

Math

オブジェクトのプロパティ いくつかの特別な値π

min() max() など

メソッド

丸めメソッド: 10進数値を整数に変換

Math.ceil(25) 1 つ追加 Math.floor(25) 1 つ返す Math.round(25) 丸め

random()メソッド [0,1 )間の乱数

その他のメソッド 読みすぎ

第6章 オブジェクト指向プログラミング

6.1オブジェクトを理解する

6.1。 1プロパティ タイプ:

データ プロパティ: 4 プロパティ

アクセス プロパティ: データ値は含まれません 4 Object.defineProperty() 経由のプロパティ定義

6.1.2複数のプロパティを定義します: Object.defineProperties() データ属性またはアクセサー属性にすることができます。

6.1.3プロパティを読み取るための特性: Object.getOwnPropertyDescriptor()

6.2オブジェクトの作成

6. 2. 1ファクトリーモード(読み取り )

6.2.2コンストラクターパターン(本を読む新しいコンストラクター)

6.2.3プロトタイプパターン:

1. プロトタイプオブジェクトを理解する

2.プロトタイプとin演算子( in for-in )

3.より単純なプロトタイプ構文(オブジェクトにアクセスするためのオブジェクトリテラル)

4.プロトタイプのダイナミクス( プロトタイプは別のオブジェクトに置き換えることができますが、すでに作成されたインスタンスには無効です)

5.ネイティブオブジェクトのプロトタイプ( プロトタイプモードを使用するだけですで新しいメソッドを定義できますが、お勧めできません)

6. プロトタイプオブジェクトの問題: インスタンス自体に属するプロパティがありません

6.2.4コンストラクターパターンを使用しますとプロトタイプ パターンの組み合わせ

最も一般的なパターンでは、インスタンスには独自のプロパティとメソッドがあり、一部は共有されます。

6.2.5動的プロトタイプモード

上記のモードに判定文を追加し、プロトタイプに動的にメソッドを追加します。

6.2.6 寄生コンストラクター パターン

とファクトリー パターンの違いは new が 1 つだけで、複数の return があります。返されたオブジェクトはコンストラクターとは何の関係もないため、instanceof 演算子を使用してオブジェクトの型を決定することはできません。お勧めしません。

6.2.7Sure コンストラクター パターン

は寄生コンストラクター パターンに似ていますが、thisnew がありません。 インスタンスが検出できません

6.3

継承

6.3.1

プロトタイプチェーンプロトタイプ検索メカニズム

1

デフォルトのプロトタイプを忘れないでください: すべての関数デフォルトのプロトタイプはすべて

Object のインスタンスです。

2.

プロトタイプとインスタンスの関係を決定します:

instanceof isPrototypeOf()

3. メソッドを慎重に定義します: インスタンスがプロトタイプを置き換えた後に、新しいメソッドを定義する必要があります。

4. プロトタイプチェーンの問題:

プロトタイプの外側の属性も継承されます

サブタイプのインスタンスを作成するとき、パラメーターをスーパータイプのコンストラクターに渡すことができません。

単独で使用されることはほとんどありません。

6.3.2

コンストラクターを借用する

call または apply を使用してパラメーターを継承して渡します ただし、使用できるのはコンストラクター パターンのみです。

また、単独で使用されることはほとんどありません。

6.3.3

結合継承

プロトタイプチェーンの実装

プロトタイプのプロパティとメソッドの継承

コンストラクターの実装の借用

インスタンスの継承プロパティ

最もよく使用される継承メソッド

6.3.4

プロトタイプ継承

(Reading)

コンストラクターは使用されません

保存された型も使用できますが、プロトタイプパターンと同様に共有されます 参照型プロパティ。

6.3.5

寄生継承

(Reading)

コンストラクターは考慮されません

使用可能 ただし関数の再利用は不可6.3. 6寄生結合継承(

Reading

)

結合継承には問題があります。スーパータイプのコンストラクターが 2 回呼び出され、インスタンスとプロトタイプに属性が重複します。 寄生結合継承はこの問題を解決し、最も理想的な継承パラダイムになります。

第7章

関数式

関数の定義方法:( 関数宣言は

で昇格されます)

名前 )

関数式(nameは空の匿名関数/

名前付き一般関数式は匿名関数

)

7.1再帰

厳密モードは使用できません argument.callee 名前付き関数式を使用できます。

7.2クロージャ: 別の関数のスコープ内の変数にアクセスできる関数

自己要約: クロージャは関数であり、通常は匿名関数です

1。クロージャ 返された外部関数内の変数にアクセスできます。

2. 別の関数のアクティブなオブジェクトは、クロージャのスコープ チェーンが破棄されるまで保存されます。

7.2.1クロージャと変数

副作用: 変数オブジェクト全体がクロージャのスコープチェーンに保存されるため、返される変数は最後に保存された値になります。

例えば、forループでは、満足できない状況が発生します。

7.2.2 クロージャ内の this オブジェクト

this オブジェクトに関して、いくつかの特殊なケースでは、クロージャはグローバル オブジェクトに配置されることがあります。 知らないうちに変わる。

7.2.3

メモリリーク

通常のメモリリサイクルを保証するためにクロージャを使用する

7.3

ブロックレベルのスコープを模倣する

匿名の自己を使用する-模倣する関数を実行します。

自己要約関数:

1.

内部実行後に破棄されます。

2.

匿名の自己実行関数により、グローバル メソッドとプロパティの汚染を軽減できます。

クロージャにはメモリの問題がありますが、この組み合わせを使用するのは非常に快適です。

7.4

プライベート変数

オブジェクト上のすべてがパブリックです

関数内のすべてがプライベートです

クロージャを通じて関数のパブリック メソッドを作成します

(特権メソッド ) ---------プライベート変数の取得に使用

コンストラクター内で作成

メモリ例: this.****** = function() {**** };

しかし、インスタンス化のたびにメソッドのセットが再構築されるため、無駄が生じます。

7.4.1

静的プライベート変数プライベート スコープ

グローバル コンストラクターのプロトタイプで囲んで特権メソッドを作成します。

コードの再利用性が向上しますが、各インスタンスには独自のプライベート変数がありません。 (これは静的プライベート変数と呼ばれるため)

特定のニーズに応じて、インスタンス変数または静的プライベート変数を使用します。

7.4.2モジュールパターン( 単一のケース: インスタンスが 1 つだけあるオブジェクト)

匿名関数内でプライベート変数とメソッドを定義し、オブジェクト リテラルを関数の戻り値。 7.4.3

拡張モジュールモード

は特定の型のインスタンスである必要があり、いくつかのプロパティまたはメソッドを追加する必要があります。

以上がJavaScript の高度なプログラミングの概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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