function Base(){
...
}
var obj = new Base();
這樣代碼的結(jié)果是什么,我們?cè)趈avascript引擎中看到的對(duì)象模型是:

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