一般我們在使用javascript中的類的時候,都是通過new來實例化這個類得到一個對象。
使用new這個關鍵字,會改變函數上下文環境,并且改變了return語句的行為。
比如一個Person類如下:
function Person() {
this.name = "hello";
};
當我們new Person的時候,改變的函數執行的上下文,因此,這個類擁有了一個屬性name,值為hello。 同時new還會改變return 語句的行為,會返回這個Person實例。
然而當我們直接調用Person()方法的時候,由于沒有使用new關鍵字,因此函數執行的上下文沒有改變,依然是window。
因此window多了一個屬性name,值為hello。
測試代碼如下:
1 var Person = function(name) {
2 this.name = name;
3 };
4
5 var format = new Person('format');
6
7 console.log(format instanceof Person);
8
9 console.log("window property -> name:" + this.name);
10
11 Person('format');
12
13 console.log("window property -> name:" + this.name);
結果如下:

理解了上面所說的原理之后,開始構建javascript"類"庫。
var Class = function() {
var klass = function() {
this.init(arguments);
};
klass.prototype.init = function() {};
return klass;
};
var Person = new Class;
Person.prototype.init = function() {
//類似構造方法。可以在這里做一些初始化操作。
}
//由于Class返回的依舊是一個函數,也就是類。因此我們可以實例化這個類。 得到實例對象
var person = new Person;
....
有了這個類庫之后, 當我們需要自己的類的時候,只需要new Class即可。 然后根據需求寫自己的初始化代碼。