Prottype使用マニュアル-クラス作成


JavaScriptでは、新しい関数を定義すると、実際に新しいクラスを宣言しましたが、この関数自体はクラスの構造関数に相当します.次のコードは、新しいPersonクラスを作成するための2つの異なる方法を示しています.Person.prototypeの定義も関数定義に続いています.
 
var Person = function(name) {  //       ,            Person  ,   Person     
	this.name = name;
}
function Person(name) {  //         Person     Person 
	this.name = name;
}
Person.prototype = {  //   Person prototype 
	printName: function() {   //     print  
		alert(this.name);
	}
}
 
関数でクラスを宣言すると、newオペレータによってこのクラスを実装できます.このように、クラスのメンバー関数を呼び出して、あなたの論理を完成させます.
 
var person = new Person("Joe Smith"); //   new        Person   ,      person
person.printName(); // person             (reference),              Person       
 
新しいクラスのインスタンスを作成する全体の流れとステップをまとめます.
1.関数を定義する方法(匿名または実名)によって、新しいクラスを宣言します. 2.必要があれば、この新しいクラスのprototypeドメインを定義します. 3.newオペレータを使用して、定義された関数に従って新しいクラスを作成します.JavaScriptコンパイラがnewオペレータに会ったら、実際に空のクラスインスタンス変数を作成しました.4.このクラスのすべてのプロトタイプ領域の属性と方法をこの新しいインスタンスにコピーし、そのメンバー関数のすべてのthisポインタをこの新規作成のインスタンスに向けてコピーします. 5.次に、newオペレータの後ろに付いている関数を実行します. 6.この関数を実行すると、存在しない属性を付与しようとすると、JavaScriptコンパイラが自動的にこのインスタンスの範囲でこの属性を新たに作成します. 7.関数の実行が完了したら、この初期化が完了した例を返します.
Prottotypeでは、クラスのオブジェクトを使用して、比較的簡単な方法で新しいオブジェクトを宣言することができます.Class.createを使用して、prototypeはデフォルトのコンストラクタinitializeを作成しました.この関数を実現すれば、Javaのコンストラクタのような形で新しいクラスのインスタンスを作成することができます.
var Class = {  //      ,                   
  create: function() {    
    return function() { //       ,                
      //      initialize                  
      this.initialize.apply(this, arguments);// initialize                    (   7      5 )
    }
  }
}
 
クラスを通して、構造関数を簡単に使って新しいクラスを作成できます.これはJavaプログラマにとってもっと受け入れやすいかもしれません.以下にJavaとJava Scriptを挙げて、それぞれの声明と新しいクラスのコードの対比を作成します.彼らはこのように似ています.
var Person = Class.create(); //                   |public class Person { //     
Person.prototype = {                                 |    private String name;
   initialize: function(name) {  //               |    public Person(String name){ //     
     this.name = name;                               |       this.name = name;
   }                                                 |    }
   printName: function() {  //                    |    public void printName(){  //     
     alert(this.name);                               |       System.out.println(name);
   }                                                 |    }
}                                                    |}
var person = new Person("Joe Smith");//           |Person person = new Person("Joe Smith");//     
person.printName(); //                            |person.printName(); //