JavaScript 12:JavaScriptは対象に向かう創建対象に基づく(一)
5056 ワード
今回はJavaScriptの対象向け技術について深く勉強します.勉強する前に、必要な用語をいくつか説明します.
これはすべての対象言語に対する共通点である.オブジェクト指向のいくつかの用語があります.
オブジェクト
ECMA-622は、オブジェクト(object)を「属性の無秩序集合」と定義し、各属性は元の値、オブジェクトまたは関数を格納します.厳密に言えば、これは意味があります.
このオブジェクトは、特定の順序なしの値の配列です.ECMAScriptはこのようにオブジェクトを定義していますが、より一般的な定義はコードに基づく名詞(人、場所、または
表示する
クラス
各オブジェクトはクラスによって定義され、クラスを対象とするレシピです.クラスはオブジェクトのインターフェース(interface)を定義するだけでなく
また、オブジェクトの内部動作(属性と方法を機能させるコード)も定義します.コンパイラと解釈プログラムは、クラスの説明に従ってオブジェクトを構築します.
実例
プログラム使用クラスでオブジェクトを作成する場合、生成したオブジェクトをクラスのインスタンスといいます.クラスによって生成されるオブジェクトの個数に対する唯一の制限は、実行によるものです.
コードのマシンの物理メモリ.各インスタンスの挙動は同じであるが、インスタンスは、独立したデータのセットを処理する.クラスでオブジェクトのインスタンスを作成するプロセスを例示化と呼びます.
(instantiation)
前の章で述べましたが、ECMAScriptには正式なクラスがありません.逆に、ECMA-622は、オブジェクトをオブジェクトとして記述するための処方箋として定義します.これ
はい、 ECMAScript論理上の折衷案は、オブジェクト定義が実際に対象自身であるためである.クラスが本当に存在しなくても、対象を定義します.
クラスといいます.ほとんどの開発者はこの用語に詳しいし、機能的には両者は等価です.
事前定義の対象を使うのは対象言語に向かう能力の一部ですが、本当に強いのは自分専用の対象を作ることができるところです.
ECMAScript 多くのオブジェクトを作成する方法があります.
一次方式
オブジェクトの属性はオブジェクトの作成後に動的に定義できるので、多くの開発者はJavaScriptの最初の導入時に以下のようなコードを作成します.
ここです.最後の属性は実際に関数を指すポインタであり、この属性は方法であることを意味する.このコードを実行すると、対象のカードが使えます.でも
ここで一つの問題があります.つまり、複数のCasの実例を作成する必要があります.そうすると、私たちは多くの類似のコードを繰り返すことになります.これは面倒くさいです.
二工場方式
上記のような複数のオブジェクトステートメントの問題を解決するために、開発者は特定のタイプのオブジェクトを作成して戻すことができる工場方式を作成しました.この方法は
実例化対象を理解して多くの重複問題が発生します.
(1)パラメータなしの工場方式
例えば、関数createCar()は、前にリストされたCasオブジェクトをパッケージ化するための動作に使用されてもよい.
象は関数として値を返します.この関数を呼び出して、新しいオブジェクトを作成し、必要な属性をすべて付与します.前に説明したカールオブジェクトをコピーします.
したがって、この方法によって、私たちはCarオブジェクトの二つのバージョン(Car 1とCar 2)を簡単に作成することができます.それらの属性は全く同じです.
(2)パラメータのある工場方式
また、createCar()関数を変更して、各属性のデフォルト値を伝達します.属性のデフォルト値を簡単に与えるのではありません.
の属性がありますが、属性の値が違います.
工場方式は繰り返し実用化された問題を解決しましたが、やはり問題があります.それは前の例の中で、毎回関数createcalを呼び出します.
新しい関数showColor()を作成するには、各オブジェクトに自分のショーColor()バージョンがあることを意味します.実際には、すべてのオブジェクトが同じ関数を共有します.
いくつかの開発者が工場の関数外で対象を定義する方法があります.属性を通してこの方法を指します.
既に存在しているshowColor関数のポインタを指します.機能的には、関数オブジェクトを繰り返し作成する問題を解決します.しかし、意味的には
関数はオブジェクトとあまり似ていません.これらのすべての問題は開発者が定義した構造関数の出現を引き起こした.
三構造関数方式
コンストラクタを作るのは工場方式の関数を作るのと同じくらい簡単です.最初のステップは、構造関数の名前を選択します.慣例によると、この名前のイニシャルは大きいです.
頭文字と通常小文字の変数名を区別するように書く.この点を除いて、構造関数は工場方式の関数に似ています.次の例を見てください
子:
演算子コンストラクタの場合、最初の行のコードを実行する前にオブジェクトを作成します.そして直接にthis属性を付与し、黙示することができます.
この場合はコンストラクタの戻り値です.(明確にreturn演算子を使用する必要はありません.)現在、new演算子と対象名Carでオブジェクトを作成すると、より似ています.
ECMAScriptの一般的なオブジェクトの作成方式です.
工場方式の関数のように、コンストラクタは関数を繰り返し生成し、各オブジェクトのために独立した関数バージョンを作成します.ただし、工場方式との関数は
同様に、外部関数で構造関数を書き換えることもでき、同様に、このように意味的には何の意味もない.これはまさに次のモデル方式の強みです.
はい、あります.次のブログでは対象に向けたプロトタイプや他の総合的な方法を詳しく分析します.
これはすべての対象言語に対する共通点である.オブジェクト指向のいくつかの用語があります.
オブジェクト
ECMA-622は、オブジェクト(object)を「属性の無秩序集合」と定義し、各属性は元の値、オブジェクトまたは関数を格納します.厳密に言えば、これは意味があります.
このオブジェクトは、特定の順序なしの値の配列です.ECMAScriptはこのようにオブジェクトを定義していますが、より一般的な定義はコードに基づく名詞(人、場所、または
表示する
クラス
各オブジェクトはクラスによって定義され、クラスを対象とするレシピです.クラスはオブジェクトのインターフェース(interface)を定義するだけでなく
また、オブジェクトの内部動作(属性と方法を機能させるコード)も定義します.コンパイラと解釈プログラムは、クラスの説明に従ってオブジェクトを構築します.
実例
プログラム使用クラスでオブジェクトを作成する場合、生成したオブジェクトをクラスのインスタンスといいます.クラスによって生成されるオブジェクトの個数に対する唯一の制限は、実行によるものです.
コードのマシンの物理メモリ.各インスタンスの挙動は同じであるが、インスタンスは、独立したデータのセットを処理する.クラスでオブジェクトのインスタンスを作成するプロセスを例示化と呼びます.
(instantiation)
前の章で述べましたが、ECMAScriptには正式なクラスがありません.逆に、ECMA-622は、オブジェクトをオブジェクトとして記述するための処方箋として定義します.これ
はい、 ECMAScript論理上の折衷案は、オブジェクト定義が実際に対象自身であるためである.クラスが本当に存在しなくても、対象を定義します.
クラスといいます.ほとんどの開発者はこの用語に詳しいし、機能的には両者は等価です.
事前定義の対象を使うのは対象言語に向かう能力の一部ですが、本当に強いのは自分専用の対象を作ることができるところです.
ECMAScript 多くのオブジェクトを作成する方法があります.
一次方式
オブジェクトの属性はオブジェクトの作成後に動的に定義できるので、多くの開発者はJavaScriptの最初の導入時に以下のようなコードを作成します.
var Car = new Object();
Car.color = "blue";
Car.doors = 4;
Car.mpg = 25;
Car.showColor = function() {
return this.color;
};
document.write(Car.showColor());// :blue
上のコードの中で、対象カードを作成します.それからいくつかの属性を設定します.色は青で、四つのドアがあります.一ガロンあたりは25キロ走れます.ここです.最後の属性は実際に関数を指すポインタであり、この属性は方法であることを意味する.このコードを実行すると、対象のカードが使えます.でも
ここで一つの問題があります.つまり、複数のCasの実例を作成する必要があります.そうすると、私たちは多くの類似のコードを繰り返すことになります.これは面倒くさいです.
二工場方式
上記のような複数のオブジェクトステートメントの問題を解決するために、開発者は特定のタイプのオブジェクトを作成して戻すことができる工場方式を作成しました.この方法は
実例化対象を理解して多くの重複問題が発生します.
(1)パラメータなしの工場方式
例えば、関数createCar()は、前にリストされたCasオブジェクトをパッケージ化するための動作に使用されてもよい.
function createCar() {
var TempCar = new Object();
TempCar.color = "blue";
TempCar.doors = 4;
TempCar.mpg = 25;
TempCar.showColor = function() {
return this.color;
};
return TempCar;
};
var Car1 = createCar();
var Car2 = createCar();
document.write(Car1.showColor()+"
");// :blue
document.write(Car2.showColor());// :blue
ここでは、最初の例のコードはすべてクリティカル関数に含まれています.また、もう一つの行の追加コードがあります.Tempcalペアに戻ります.象は関数として値を返します.この関数を呼び出して、新しいオブジェクトを作成し、必要な属性をすべて付与します.前に説明したカールオブジェクトをコピーします.
したがって、この方法によって、私たちはCarオブジェクトの二つのバージョン(Car 1とCar 2)を簡単に作成することができます.それらの属性は全く同じです.
(2)パラメータのある工場方式
また、createCar()関数を変更して、各属性のデフォルト値を伝達します.属性のデフォルト値を簡単に与えるのではありません.
function createCar(Color,Doors,Mpg) {
var TempCar = new Object();
TempCar.color = Color;
TempCar.doors = Doors;
TempCar.mpg = Mpg;
TempCar.showColor = function() {
return this.color;
};
return TempCar;
};
var Car1 = createCar("red",4,23);
var Car2 = createCar("blue",3,25);
document.write(Car1.showColor()+"
");// :red
document.write(Car2.showColor());// :blue
createCar()関数にパラメータを加えると、作成するCarオブジェクトのカラー、doors、mpg属性に値が付けられます.これは2つのオブジェクトを同じにします.の属性がありますが、属性の値が違います.
工場方式は繰り返し実用化された問題を解決しましたが、やはり問題があります.それは前の例の中で、毎回関数createcalを呼び出します.
新しい関数showColor()を作成するには、各オブジェクトに自分のショーColor()バージョンがあることを意味します.実際には、すべてのオブジェクトが同じ関数を共有します.
いくつかの開発者が工場の関数外で対象を定義する方法があります.属性を通してこの方法を指します.
function showColor() {
return this.color;
};
function createCar(Color,Doors,Mpg) {
var TempCar = new Object();
TempCar.color = Color;
TempCar.doors = Doors;
TempCar.mpg = Mpg;
TempCar.showColor = showColor;
return TempCar;
};
var Car1 = createCar("red",4,23);
var Car2 = createCar("blue",3,25);
document.write(Car1.showColor()+"
");// :red
document.write(Car2.showColor());// :blue
上記のように書き換えられたコードの中で、関数createCar()の前に関数show Color()が定義されています.クレイテカーの内部に、対象を一つずつ与えます.既に存在しているshowColor関数のポインタを指します.機能的には、関数オブジェクトを繰り返し作成する問題を解決します.しかし、意味的には
関数はオブジェクトとあまり似ていません.これらのすべての問題は開発者が定義した構造関数の出現を引き起こした.
三構造関数方式
コンストラクタを作るのは工場方式の関数を作るのと同じくらい簡単です.最初のステップは、構造関数の名前を選択します.慣例によると、この名前のイニシャルは大きいです.
頭文字と通常小文字の変数名を区別するように書く.この点を除いて、構造関数は工場方式の関数に似ています.次の例を見てください
子:
function Car(Color,Doors,Mpg) {
this.color = Color;
this.doors = Doors;
this.mpg = Mpg;
this.showColor = function() {
return this.color;
};
};
var Car1 = new Car("red",4,23);
var Car2 = new Car("blue",3,25);
document.write(Car1.showColor()+"
");// :red
document.write(Car2.showColor());// :blue
上のコードと工場方式の違いを説明します.まず、コンストラクタ内でオブジェクトを作成せずに、thisキーを使用します.new運を使う演算子コンストラクタの場合、最初の行のコードを実行する前にオブジェクトを作成します.そして直接にthis属性を付与し、黙示することができます.
この場合はコンストラクタの戻り値です.(明確にreturn演算子を使用する必要はありません.)現在、new演算子と対象名Carでオブジェクトを作成すると、より似ています.
ECMAScriptの一般的なオブジェクトの作成方式です.
工場方式の関数のように、コンストラクタは関数を繰り返し生成し、各オブジェクトのために独立した関数バージョンを作成します.ただし、工場方式との関数は
同様に、外部関数で構造関数を書き換えることもでき、同様に、このように意味的には何の意味もない.これはまさに次のモデル方式の強みです.
はい、あります.次のブログでは対象に向けたプロトタイプや他の総合的な方法を詳しく分析します.