Class - 類創建
Class類實現了在JavaScript中聲明一個新的類, 并通過構造函數實例化這個類的機制。通過使用Class.create()方法, 你實際上聲明了一個新的類, 并定義了一個initialize()方法作為構造函數, 一旦你在這個聲明的類的prototype中實現了改該方法, 你就可以使用new操作符來創建并實例化一個類。
Knowledge Prepare - 知識準備
在JavaScript中, 當你定義了一個新的函數, 你實際上聲明了一個新的類, 而這個函數本身就相當于類的構造函數。 下面的代碼向你展示了兩種不同的方式來創建一個新的Person類, 而Person.prototype的定義也緊跟在函數定義之后。
var Person = function(name) {
this.name = name;
}
function Person(name) {
this.name = name;
}
Person.prototype = {
printName: function() {
alert(this.name);
}
}
當你通過函數的方式聲明了一個類之后, 你就可以通過new操作符來實例化這個類。這樣, 你就可以調用類的成員函數來完成你的邏輯。
var person = new Person("Joe Smith");
person.printName();
我們來總結一下創建一個新的類的實例的整個流程和步驟:
1. 通過定義一個函數的方式(匿名或者實名)來聲明一個新的類.
2. 如果有必要, 定義這個新的類的prototype域.
3. 使用new操作符緊跟你所定義的函數來創建一個新的類的實例. 一旦JavaScript編譯器碰到了new操作符, 它實際上創建了一個空的類實例變量.
4. 將所有這個類的prototype域中的屬性與方法復制到這個新的實例中, 并將其成員函數中所有的this指針指向這個新創建的實例.
5. 接下來, 執行緊跟在new操作符后面的那個函數.
6. 當你執行這個函數時, 如果你試圖對一個不存在的屬性進行賦值, JavaScript編譯器將自動為你在這個實例范圍內新創建這個屬性.
7. 函數執行完畢后, 將這個初始化完成的實例返回.
在Prototype中, 使用Class對象, 你可以以一個比較簡單的方式來聲明一個新的對象。通過使用Class.create(), prototype為你創建了一個默認的構造函數initialize(), 一旦你實現這一函數, 就可以以一個類似Java中構造函數的方式來創建一個新的類的實例。
Source View - 源碼解析
var Class = {
create: function() {
return function() {
this.initialize.apply(this, arguments);
}
}
}
Field & Function Reference - 屬性方法一覽
Class ( 靜態 )
Method / Property |
Kind |
Arguments |
Description |
create() |
靜態方法 |
/ |
用于聲明一個新的類并提供了一個名為initialize構造函數支持 |
Analysis & Usage - 分析與使用
通過Class類, 你可以很容易地使用構造函數的方式創建一個新的類, 這對于Java程序員來說或許更加容易被接受。下面我們列出了Java和JavaScript各自聲明和創建一個新的類的代碼對比, 我們可以看到, 他們是如此相似:
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();