JavaScriptのオブジェクト向け

4621 ワード

最近JavaScript言語を研究したところ、この言語は表面的には簡単で学びやすく、実際には深くて計り知れないことが分かった.ECMAScript規格(欧州コンピュータメーカー傘下委員会が制定したスクリプト言語規格)を実現したが、この規格には「クラス」の概念はない.だからこの言語でオブジェクトに言及すると、実際にはC++,C#,Javaのオブジェクトとは少し違います.JSでは、すべてがオブジェクトであり、関数も含まれています.オブジェクトは、ハッシュ・リストのセット、または名前の値のペアです.たとえば、子犬のオブジェクトを作成します.
var dog_01=new Object();





dog_01.name="Kitty";



dog_01.age=2;



dog_01.sayName=function(){alert(this.name);};





dog_01.sayName();

  これは簡単にオブジェクトを作成する方法です.しかし、コードが冗長に見えるので、この方法はあまりよくないと思います.dog_をもう1つ作成するとしたら02相手、私は基本的に上のコードをもう一度書き直すことです.このようなプログラムは明らかに悪いので、オブジェクトを作成する手順を関数にカプセル化して、createDog()という名前を付けてみましょう.
function createDog(name, age)

 {

    var o = new Object();



    o.name = name;



    o.age = age;

    o.sayName = function() {

        alert(this.name);



    };











    return o;





}



var dog_01 = createDog("Candy", 3);

var dog_02 = createDog("Mat", 3);

var dog_03 = createDog("Undo", 3);





alert(dog_01.sayName());//Candy

alert(dog_02.sayName());//Mat

alert(dog_03.sayName());//Undo

  このモデルはソフトウェアエンジニアリングでは「工場モデル」と呼ばれています.この方法は工場のように、絶えず呼び出して、次々と「Dog」の完成品を加工します.このような関数で具体的なオブジェクトの詳細をカプセル化する方法はよく機能していますが、この方法で作成されたオブジェクトにはタイプがありません.たとえば、文字列オブジェクトはStringタイプ、数値オブジェクトはNumberオブジェクト、関数オブジェクトはFunctionタイプ、日付オブジェクトはDateタイプですが、このようにして作成されるオブジェクトはどのようなタイプですか?せいぜいObjectタイプです.
  多くのプログラミング言語(C#など)では、特殊なタイプのオブジェクトを作成するには、コンストラクタを呼び出す必要があります.JSには、データ、Numberなどの「オリジナルオブジェクト」があります.これらは実行環境に直接存在し、コンストラクション関数を表示せずに呼び出す必要はありません.自分で定義したオブジェクトタイプを作成するには、コンストラクション関数を自分で書くことができ、自分の属性と方法を追加することができます.例えば、次のようにします.
function CreateDog(name, age) //            

 {

    this.name = name;



    this.age = age;

    this.sayName = function() {

        alert(this.name);



    };



}



var dog_01 = new CreateDog("Lucky", 33);//new

var dog_02 = new CreateDog("Mat", 3);

var dog_03 = new CreateDog("Undo", 3);

alert(dog_01.sayName());

//Candy

alert(dog_02.sayName());

//Mat

alert(dog_03.sayName());

//Undo

この関数を少し修正して、いわゆる「構築関数」と呼ばれ、呼び出すときにnewキーワードを使いました.コンストラクション関数は一般関数と変わらず、newで1つの関数を呼び出す限りコンストラクション関数と呼ばれます.この関数ではオブジェクトを表示せずに作成し、thisキーワードを使用しました.オブジェクトも返されませんでした.newでオブジェクトを作成するので