オブジェクト指向プログラミングのアイデア------ ----------抽象プロセスのインスタンス化プロセス

オブジェクト指向プログラミングのアイデアは------ ----------インスタンス化プロセスの抽象化
、要件に応じて、関連する抽象オブジェクトをA)を
2特性やオブジェクトの動作をまとめたもの)、機能に性質、挙動が方法となる
3)オブジェクトインスタンスは、コンストラクタを定義し
、それぞれの要件を完了するために、オブジェクトのプロパティとメソッドを呼び出すことによって)4


プロセス指向:すべてがプロセスのノウハウ、ハンズオンのすべてのプロセスに注意を払うべきである
結果に焦点を当てて、オンデマンドでのオブジェクトの検索(パッケージ・ファンクション)オブジェクトを行うにはすべて、唯一のプロセス:オブジェクト指向呼び出すことで
オブジェクト指向機能を:カプセル化、継承、ポリモーフィズム
JSがオブジェクト指向言語ではなく、シミュレートすることができ、オブジェクト指向の考え方
JSがJSが多く組み込まれているオブジェクトのオブジェクトベースの言語であり、JSは、オブジェクト指向、JS缶をシミュレートすることができますオブジェクトを作成していない
何の継承とポリモーフィズムをJSが、シミュレートすることができる
パッケージが一箇所にコードを参照する
オブジェクト、コードのコレクションに固有のプロパティとメソッドの特定には特に何かが何であるかを
、現在のオブジェクトのメソッドであなたは、この値を使用することができ、オブジェクトのプロパティの現在の値にアクセスすることができ、現在の値
オブジェクトは、この常に現在のメソッド呼び出しまたはプロパティを指す
オブジェクトは、操作する関数にパラメータとして、その後ノーリターン文が渡されない場合また、オブジェクトが操作アクセスできる
内部メモリ空間内のオブジェクトの作成:1
1)のいずれかを介して 形式のメモリで作成されたオブジェクトの形は同じであり、変数に割り当てられたオブジェクト
2)ヒープ上のオブジェクトインスタンスがアドレスであり、変数はメモリスタック内部に格納され、スタックの内部
オブジェクト・インスタンスを格納しますアドレス内の「スタック」内
のオブジェクトを作成するには、3つの方法:1
1:システムのコンストラクタは、オブジェクトの作成を呼び出し
型オブジェクトシステムは、配列、オブジェクトを作成するには、直接呼び出しのように、来る
VAR OBJ =新しいオブジェクトを();オブジェクト・インスタンスと呼ば//変数記憶オブジェクトは、objがオブジェクト型の「インスタンス」であり、それは、ケースの特定を意味
=属性値obj.nameを追加します
機能obj.name =添加する方法
可変タイプかどうかを判定するためのinstanceofを
どのように複数のオブジェクトを作成するため
にカプセル化されたオブジェクトコードの関数作成する
関数のCreateObject(属性値は、属性値2、){
VAR OBJ =をオブジェクト)(新しい新規;
obj.name =「属性値1」
OBJ、年齢=「属性2」
OBJ戻り
}
2:カスタム・コンストラクタは、オブジェクトを作成する(第一の結合ファクトリーモードの作成に関連して)
機能人(属性値1、属性値2、){
this.name = "属性値1";
this.age = "属性値2";
}
VAR =新しい新暁人( "明"、22);
注:
関数とコンストラクタ1)との差:最初の文字が大文字かどうか
、オブジェクトを作成するために、2)コンストラクタだけでなく、正常な機能として使用することができる
3)コンストラクタ関数が明示的にオブジェクトを直接割り当て特性およびこの主題の方法を作成しないcreatePersonを置き換え、全く存在しませんreturn文の
利点:
工場出荷時のモードに関しては、カスタムコンストラクタ手段、それが特定の型のインスタンスとして識別することができ、将来は、はっきり、区別することが容易であること
と、多様に比べてオブジェクトを作成します 私は、我々は人(人)コンストラクタを構築することができますタイプの人物のオブジェクトを作成します
プロパティとメソッドが定義されており、誰が適合している、私は、このような、我々は動物(動物)コンストラクタ構築できる動物の種類などのオブジェクトを作成したい
フィット、プロパティとメソッドと動物の内側にある
注:もちろん、任意の関数はコンストラクタとして使用することができ、唯一のライン上の新しいコールを追加する必要が
作成プロセス:
1)メモリ内の空き)スペースのオープン(アプリケーション、新しく作成されたオブジェクトストア
(インスタンスを現在のオブジェクトにこのセットを置く2)オブジェクト)
プロパティおよびメソッド3)指定されたオブジェクト
このオブジェクト返す4)
5)変数最終に

文字デフォルト大文字使用
3:オブジェクトリテラル方法作成
例:
VaRのNUM = 10; //割り当てリテラルフォーム
VAR ARR = []は; //は、配列リテラルフォームを作成する(ブランク)
VAR OBJ = {}; //オブジェクトリテラルフォームを作成し(ブランク)
構文:
VAR OBJ = {
名: "ボブ"、
年齢:20、である
食べる:関数(){...}
}
のシモンズ:中間体は、カンマで区切られた
4:のプロトタイプを導入することにより、同一の機能を再現する方法で問題を解決するために複数のオブジェクトをインスタンス化
Personオブジェクトのような1万インスタンスが作成され1万位相関数 、しかし、方法は、メモリの浪費同じではなく、メソッドが定義されている
ようように、外部
関数が食べる(){にconsole.log(「 XX」)}。
人関数(名前、年齢){
this.eat =食べ;
}
簡単我々はプロトタイプに参照できるように、同じ名前の変数に置き換えることは、この問題を解決する:
Person.prototype.eat =関数(){にconsole.log(「XX」を)};
関数人(名前、年齢){
this.eat =食べ;
}
この完璧な、この方法のオブジェクトのインスタンスが、唯一のオブジェクトインスタンス__proto__プロパティプロトタイププロトタイプオブジェクトを指し示すことにより、存在しない
食べます()この方法、あなたが使用できるように、
4:アクセスする別の方法をオブジェクトのプロパティ
構文:
OBJ [「属性名」]
OBJ [「メソッド名」]();
5:要約
欠陥は、オブジェクトリテラルを作成します。値を渡すことができない、文字通りコンストラクタの改良版を達するオブジェクトを作成する方法は、オブジェクトの作成
、オブジェクトの欠陥を作成するためのコンストラクタを:
インスタンスオブジェクトの同じタイプの方法をobj1.eat obj2.eat//eatを呼び出すために等しくない場合の自己定義コンストラクタメソッドで
それぞれ異なるインスタンスオブジェクトの複数のインスタンスがある場合、オブジェクトと等しくない方法は、メモリの比較的無駄です

6:構造と機能とオブジェクトのプロトタイプ・オブジェクト・インスタンスとの関係
1)オブジェクトのコンストラクタをインスタンス化するために使用され、コンストラクタ関数自体は、プロパティおよびメソッドが含まれていない、インスタンスは、オブジェクトのプロパティ
コンストラクタのプロトタイプオブジェクトを持つ2)メソッドを格納プロトタイプ、コンストラクタ性がある:コンストラクタは
重要なことは、点コンストラクタ自体に、オブジェクトのインスタンスを作成することである;
3)独自のプロパティ内に格納されたオブジェクトをインスタンスではなく、店舗方法が、__proto__プロパティ内のオブジェクトの各インスタンス、
方法を記憶するプロトタイプオブジェクトのコンストラクタに、各オブジェクトのインスタンスは、そのような方法の一つである点が呼び出される、オブジェクトのインスタンスは、
直接プロトタイプメソッドの内部にアクセスすることができます
7:プロトタイプ使用して共有データ
1)の添加方法は、属性がプロトタイプで書くことができる
構文:.のObject.prototype属性値=共有
:2)プロトタイプオブジェクトであるが、文字通りの文言文言置き換えることが可能である
のObject.prototype = {
コンストラクタ。オブジェクト、//ポイントを手動にする
共有属性1:1つの値、
共有プロパティ2:2値、
パーティー 。1:関数(){....}
};
注:これは、手動でコンストラクタコンストラクタポイントである必要があり、そうでなければプロトタイプが存在しない
8:メソッドは、オブジェクトの各インスタンスを呼び出すことができる
構文:
this.play =は関数(){this.eat()}
this.eat = fucntiong(){。}
また、各プロトタイプにアクセスできる方法
構文:
Object.prototype.eat = functiong(){this.play()}
Object.prototype.play =関数(){。}
9:順次インスタンスオブジェクトのプロパティと同じ名前のメソッド
例:
機能人(セックス){
this.sexセックス=;
}
Person.prototype.name =「F」;
; VAR =人物(「M」)あたりの新しい新
コンソール。ログ(per.sex)// Mの
説明:
この属性を呼び出すときに、システムがない場合は、見つけるためにプロトタイプオブジェクトの内部に、これは方法が同じである、プロトタイプチェーンと呼ばれ、検索するオブジェクトの内部のインスタンスを起動します
10:追加して組み込みオブジェクトプロトタイピング
アレイ()文字列()日付( ) これらのシステムは、コンストラクタが付属している、我々はそれらをインスタンス化し、メソッドを呼び出したとき、彼らはオブジェクトのインスタンス見つかった
メソッド呼び出しは、これらの基本的なコンストラクタ(プロトタイプのプロトタイプオブジェクトに配置されています)で
、我々は、それは()のソースコードを変更プロトタイプオブジェクトシステムにメソッドを追加することができれば、1)
例えば、私は逆の文字列文字列方法持ちたい
String.prototype.mymathを=関数(){...}
このある
プロトタイプオブジェクト属性追加します11は
構文は:
機能人(){
= 0 this.a;
}
Person.prototypr.aaa =関数(){
this.a = 100;
}
VAR =一人当たりの新しい新
Person.aaa()
はconsole.log(per.a)// 100
の説明:次の宣言後に有効にするプロパティを呼び出すために
12:バインド方法が指しての機能に変更する
構文:Game.prototype.automaticRun =関数(){
この= VAR;
this.snake.init();
のsetInterval(関数(){
//ここでその使用このウィンドウは、オブジェクトを指しているオブジェクトに、タイマーの窓に属するオブジェクトであるゲームのポイント
; this.snake.move()
this.snake.init();
} .bind(つまり)、150); //バインドこちらこの点の方法を変更することができる
};
13:と呼ばれる属性を書き込む別の方法
varが人()あたりの新しい新=
[「属性名」]あたり;
[「メソッド名」]()あたり;
14:プロトタイプ点が変化してもよいです
プロトタイプオブジェクト(__proto__)ポインティングプロトタイプオブジェクトコンストラクタ(プロトタイプ)が、プロトタイプオブジェクトのコンストラクタの例には、変更することができるため、コンストラクタ
自体リテラルの形で書き込まれる対象となる、プロトタイプオブジェクトのコンストラクタは、他を指すこと、及びオリジナルの故障に対象点の例
構文:
//コンストラクタ定義
関数を者(年齢、名前){
この。アクティブ= "中継"、
this.age年齢=
this.name =名前が
};
の//プロトタイプオブジェクト人
Person.prototype = {
タイプの"ヒト"、
関数(){:EAT
私がしたいはconsole.log(」 )」食べる;
}、
コンストラクタ:人
}
//別のコンストラクタ定義
関数学生(){

};
//コンストラクタのプロトタイプは、オブジェクトコンストラクタの別のインスタンスを指しているオブジェクト
Student.prototype =新しい人(12、 「スラグスラグ」);
//インスタンス化このコンストラクタ
するvar STR =新しい新しい学生();
はconsole.log(str.name); //スラグスラグ
理解:このオブジェクトのプロトタイプは、別のコンストラクタコンストラクタへのポインタであります一例として、プロトタイプチェーンと呼ばれ、私たちが想像することができ、我々は、ヒト対象を定義し、
これは基本的な人間の属性とメソッドを定義し、我々はプロトタイプになる彼らは、本質的に人間に属し、そのため、我々は、学生のコンストラクタを定義し
、それをオブジェクトのポイントをそのオブジェクトの学生の例はあなたには、いくつかの人々にアクセスできるように、プロパティとメソッドの
説明:__ proto__点コンストラクタのプロトタイプ、プロトタイプオブジェクトはプロトタイププロトタイプ__proto__ Aコンストラクタを指しているが__proto__、
ように
15:プロトタイプオブジェクトのプロトタイプの目的は__proto__向けられますヌル
理解する:コンストラクタは、プロトタイプオブジェクトのプロトタイプであり、プロトタイプオブジェクトは、独自のプロトタイプ__proto__を持つオブジェクトであり、Objectオブジェクトをポイントし、
そしてオブジェクトは、オブジェクトのプロトタイプオブジェクト自体であり、オブジェクトプロトタイプ__proto__のプロトタイプオブジェクトのプロトタイプながら;それがnullである
任意のオブジェクトのインスタンスがオブジェクトであり、オブジェクトプロトタイプチェーンの終わりである:集計


16:プロトタイプポイントの変更はまた、独自のプロトタイピングを追加する方法を正常に~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ん
我々は唯一のポイントを変更する必要がありますプロトタイプメソッドの後に追加することができます
構文:
Student.prototypeが新しい新=人(12は、「スラグスラグ」);
Student.prototype.sayHi =機能(){
はconsole.log(「ハンサム、あなたは大丈夫」);
}
解説:実際には、この方法は、同時に2つの方向へのポイントまたはポイントに戻って変化しない、方法は、独自のプロトタイプオブジェクトに定義されているように見える、
固体は、方法は、オブジェクトコンストラクタの別のインスタンスで定義されている吸引
Student.prototype .sayHi等価
新しい人(12、「スラグスラグ」).sayHi =関数(){} ......
PS:抽象書き込む
17:パッケージ
パッケージ:パッキングは
、例えば:変数に格納された値
を繰り返し数関数のコード
内のオブジェクトの属性およびメソッドのセット
ファイル、JSのオブジェクトの数
18:多型
の異なる挙動を有する物体の、または異なるオブジェクトに対して同じ動作で、異なる結果、あなたが望むどのような状態には、最初に継承されている必要はあり
19:クラス
オブジェクト指向プログラミング言語のを (特定のデータ型)の存在クラスの概念(クラス)
20:継承
そこにはJSクラスはありませんが、機能のクラスをシミュレートするように構成することができ、そしてプロトタイプ継承することによって達成されるので、継承は、関係、クラスのクラス間の関係である
データ共有のための継承データ共有を実現することも、JS継承
プロトタイプの効果1:メモリ空間の節約データ共有、
アクションプロトタイプ2:継承を達成するために、
継承関係です:
親と子レベルのクラスレベルとの関係
例えば、:親カテゴリは、親カテゴリのいくつかのサブセットをカテゴリのいくつかのサブセットを持っている必要がありますレベルは必ずしもない
問題継承するプロトタイプチェーン:21
構文:
Son.prototypeは新しい新しい父親(agu1、agu2を)=;
私たちは一例による親の子コンストラクタのプロトタイプコンストラクタを割り当て、これは確かに継承されたプロパティにつながったが、共通していますすべて同じのプロパティ値
22:ボローコンストラクタは継承され
、これを我々は監督コンストラクタメソッドの呼び出しによって子を変更することができます
:構文を
関数の息子(agu1、agu2、agu3){
Father.call(これ、agu2、agu3)
この= scroe .scroe;
}
分析:これは、ポイントにこの時点の人の息子を参照するオブジェクトの、すなわち子インスタンス、インスタンス化に対する人 中に息子のインスタンス
コンストラクタは.call(現在のオブジェクト、属性、プロパティは、属性)
//属性の継承が解決し、値が繰り返されることはありません
ではない継承親カテゴリの方法:欠陥@
23:呼び出し方法詳細
単語、変更をこの点は、オブジェクト
人気のポイント:私はこの方法の他のオブジェクトを使用する
構文:
他のオブジェクトのメソッド名を.apply(現在のオブジェクト、パラメータ、......);
構文
のような関数A(){...} } = {Bの
a.call(B)が

B = {
...} {)関数を(
}
ように、オブジェクトに相当する機能にB、Bを指し、この(ウィンドウ)である:の解析します関数オブジェクトのBに点
OBJの下に配置されるオブジェクトを追加する機能がオブジェクトであることに注意し、機能オブジェクトへの参照では、対象物OBJのプロパティまたはメソッドになる追加しましょう
が、それは実際には存在しません削除するために使用されるオブジェクトOBJ、
1、そうでない場合、着信コールとパラメータを適用またはnullを渡し、デフォルトウィンドウにメソッド関数このポイントを呼び出す
後、2適用およびコール第二に渡さ方法およびパラメータは、a.callとしてメソッド呼び出しオブジェクトのパラメータ、(OBJ、ARG1、ARG2)であり 、 ARG1とARG2オブジェクト
関数は、戻り値がある場合のパラメータ、及び2つの方法は、関数を呼び出すために使用することができ、メソッドの戻り値もの割り当ての形で入力することができる呼び出す
三適用との唯一の違いは、その着信パラメータであります フォーム、配列リテラル形式使用して渡されたパラメータ、コールApplyを使用した
最初のオブジェクトに、この関数またはオブジェクトポイントの変更を適用し、呼び出して、4をパラメータ点を、本当にオブジェクトに属している指摘しない、
2、5関数コンストラクタメソッドは、プロトタイプのプロトタイプで存在します
24:組合せ継承
プロトタイプ継承+ボローコンストラクタ継承
構文:
関数ソン(agu1、agu2、agu3){
Father.call(この、agu2、agu3)
this.scroe = scroe;
}
Son.prototype父新しい新=();
パース:我々はメソッドを継承プロトタイプチェーンを組み合わせることができ、及びのインスタンスが存在しないので、コールコール()コンストラクタ継承ボロー実装プロトタイプ方法は、親クラスを継承することができない
ことによりされているように(ちょうどプロトタイプメソッドを使用する、パラメータを渡す必要がコール親クラスの継承属性)
25:継承されたコピー
先のループを通って横断その上にオブジェクトのプロパティと別のオブジェクトのメソッド
関数人(){

}
Person.prototype.name = "ミレー";
Person.prototype.age = 33である。
Person.prototype.sex = "F";
Person.prototype.sayHi =関数(){
にconsole.log( "HAああ")
}
/ /ヌルオブジェクト定義
するvar JSE = {};
(Person.prototype varにキー){ため
JSEキープロパティと割り当てに//セット動的Forinサイクル
JSE [キー] = Person.prototype [キー];
}
26である:要約継承
プロトタイプの役割:データの共有、省スペース
継承された役割を:データの共有、省スペース
継承するプロトタイプチェーン:プロトタイプへの変更点は、共有のプロパティ値を変更することができない
主な問題のプロパティ値を変更することはできませんが、あなたはいない継承することはできません:継承ボローコンストラクタプロトタイプオブジェクト
組成継承:プロトタイプチェーン継承+ボローコンストラクタ継承、プロパティ値、及び連続プロトタイプオブジェクトの問題は解決できない
コピー継承:トラバーサルオブジェクトの別の方法にコピー、オブジェクトのプロパティおよびメソッドである
同じ名前:27そこプロトタイププロパティの問題があると属性
文を内部属性値なしで、同じ名前のprototypeプロパティが内部プロパティが上書きされます場合は、もし内部属性の割り当て、同じ名前の元 プロパティは動作しません!
28:高度な関数
の関数宣言
関数f1(){}
F1()
関数発現
VAR F2 =関数(){}
F2()
注:のif-else文の関数宣言した場合、IE8の問題がブラウザで発生し、そのIE8 elseステートメントはまた、意志事前解決。
しかし、関数式は、最初に定義された関数は、その後、裁判官の割り当ての問題であれば、else文にIE8で発生していない問題の方法によって解決することができる
29:バインド()メソッドだけでなく、他の二つの方法として、また大文字小文字の区別の
A、バインド機能は、)(この時点まで、オブジェクトの戻り値を変更するために使用呼び出しを()、適用する方法に似ていますが、コールの必要性は、括弧を追加する場合は、の関数であり
、次のように:(obj.bind)()
2構文:obj.bind(targetObjは、ARG1、ARG2が )、 最初の引数は、このデフォルトのウィンドウの際にヌル点通過し
第三に、最大の違いバインド()メソッドおよび呼び出しを()、(適用)がバインド()メソッドでありますコピー機能は、呼び出しを実行して機能を実行する直接適用する、典型的なケースがされなくなり
、これは変更することができますが、設定タイマ機能のポイントは、バインドタイマーが正常に使用することができます使用することですが、コールとして適用されますポイントが、唯一つの出力
30:いくつかの関数の属性
名を:関数の名前は、読み取り専用で、変更することはできません
引数:引数の数
長さ:正式なパラメータの数
、呼び出し元:関数呼び出し機能
31:高次手紙 これは、引数として機能します
まず、関数をパラメータとして、着信コールが、括弧することができない正常に実行されたときにときに提供ブラケット、その関数の戻り値(関数の戻り値前提パラメータ)
II。

32:スコープスコープチェーン、事前分析
変数:ローカルおよびグローバル変数の
スコープ可変領域を使用することができる
ブロックレベルのスコープ:可変領域を使用することができるが、中括弧{}スタッフ内部、JSなしの対を指しブロックレベルスコープの
スコープチェーン内部スコープは、外部データレイヤを使用できます
事前解決を(コードの内部を含む)変数の宣言、関数宣言は、最上位の現在のスコープの割り当てに昇温され、変数、関数として表さ式割り当て同じ位置
33:クロージャは、
関数クロージャ、クロージャオブジェクト、ほとんど意味を持って
定義されたグローバルスコープを持つ非ローカル変数のキャッシュデータに、完全に主に基づいて、スコープチェーン:分析
構文:1またはローカル変数が------>ローカル変数コード内で宣言、データがキャッシュ
内部機能を内部に使用される2つの変数の関数を返し、呼び出しの範囲関数
3各使用の戻り値(関数)リリースタイムを延長する変数を初期化します-------->データキャッシュのためのメモリ
の利点:キャッシュされたデータ、短所:キャッシュデータを、手数料スペース
34:サンドボックスは、サンドボックス化
、(重複する名前の競合を回避するため)仮想テスト環境と同等の外には影響しません、コードを実行する仮想環境を、
達成するために:使用ローカル変数を、関数呼び出しから
構文:
VAR NUM
(関数(){
VAR NUM
とコード囲まれた環境のシリーズ、外の世界と競合しない
}())
の分析:我々は、閉鎖された環境として内側から、当社のカスタムコードと実行内部を関数を呼び出すことができます関係の範囲と外の世界のように競合することはありません
通常、私はあなたがスプレッド変数にしたい場合は、手動でプロパティウィンドウを設定する必要があり、(例えば重複する名前など)の影響を受けることができ、書き込みコードにコードブロックは、サンドボックスの内側に配置されている必要はありません
再帰:35
、関数呼び出し機能を自分で終了する必要があります条件
構文:関数f1(){
実行コード
F1()
終了条件回避無限呼び出し
}
F1()
注:DOは再帰を使用しないで、非効率的な
36:の浅いコピー
複製されたオブジェクトの全体プロパティ別のオブジェクトへの
ディープコピー:だけでなく複製特性の方法だけでなく、新規オブジェクトのコピー
37:擬似配列及び配列
アレイをlei'siに、コンストラクタアレイ、属性名を配列インデックスをシミュレートするために構築されたオブジェクトのオブジェクト擬似のインスタンスの配列をインスタンスをオブジェクトであります
1:アレイは、ダミー配列長性を有していない
可変長の配列、ダミーアレイ不変(ダイナミックアクセス長手段の長さ)の長さ:2
3:アレイ配列は、非アレイのダミーアレイプロトタイピングでは、この方法を用いて還元することができます

おすすめ

転載: www.cnblogs.com/loveHtml/p/12102560.html