function Base(){
...
}
var obj = new Base();
這樣代碼的結(jié)果是什么,我們在javascript引擎中看到的對象模型是:
;
new操作符具體干了什么呢?其實很簡單双仍,就干了三件事情懊亡。
var obj = {};
obj.proto = Base.prototype;
Base.call(obj);
如果我們給Base.prototype的對象添加一些函數(shù)會有什么效果呢?
例如代碼如下:
Base.prototype.toString = function() {
return this.id;
}
那么當我們使用new創(chuàng)建一個新對象的時候,根據(jù)proto的特性,toString這個方法也可以做新對象的方法被訪問到。于是我們看到了:
構(gòu)造函數(shù)中友驮,我們來設(shè)置‘類’的成員變量(例如:例子中的id),構(gòu)造對象prototype中我們來設(shè)置‘類’的公共方法驾锰。于是通過函數(shù)對象和Javascript特有的proto與prototype成員及new操作符卸留,模擬出類和類實例化的效果。