js中的構(gòu)造函數(shù)模式, 原型模式和寄生構(gòu)造函數(shù)模式

1. 構(gòu)造函數(shù)模式

function Foo(arg) {
    this.xxx = arg;
    this.xxx = xxx;
} 

構(gòu)造函數(shù)模式的函數(shù)體在每次new對象的時候都會執(zhí)行一遍. new的話, 會自身創(chuàng)建一個作用域, 里面的this指向這個, 若是沒有new, 直接執(zhí)行, 那this得根據(jù)具體執(zhí)行上下文確定. 這種方法會導致方法具有多個實例, 浪費內(nèi)存.

2. 原型模式

function Foo() {
}

Foo.prototype = {
    xxx: xxx,
    xxx: xxx
}

原型模式相對于構(gòu)造模式來說是沒有構(gòu)造參數(shù)的. 而且這種方法不具有實例私有的屬性.

3. 構(gòu)造函數(shù)模式和原型模式兩者適用范圍與組合使用

最好兩者結(jié)合適用, 構(gòu)造函數(shù)模式負責創(chuàng)建實例屬性, 原型模式負責創(chuàng)建方法和共享的屬性, 這樣能最大限度節(jié)省內(nèi)存.

4. 寄生構(gòu)造函數(shù)模式

這種方法說白了就是在構(gòu)造函數(shù)模式上寄生了原型模式, 通過判斷是否已存在某個原型屬性, 來判斷是否需要執(zhí)行原型初始化.

function Person(name) {
    this.name = name;
   if(typeof this.sayName != 'function') {
       Person.prototype.sayName = function () {
            alert(this.name);
       } 
   } 
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容