構(gòu)造函數(shù),原型,實(shí)例三者的聯(lián)系

構(gòu)造函數(shù)通過prototype獲取到原型

原型通過construxtor

實(shí)例通過_ proto _找到原型

構(gòu)造函數(shù)與工廠函數(shù)之間差異: 1.工廠函數(shù)需要?jiǎng)?chuàng)建對(duì)象,以及必須有返回值 2.工廠函數(shù)針對(duì)的都是Object的對(duì)象模型,而構(gòu)造函數(shù)可以匹配自定義的對(duì)象模型 即前者不論創(chuàng)建什么都只有一個(gè)xx instanceof Object 而后者根據(jù)自定義名而定類型,如上舉例所示 3.構(gòu)造函數(shù)弊端,如果在全局中定義相同的局部變量,容易造成全局污染,因?yàn)閠his.xx如果在局部獲取不到,就會(huì)去全局中獲取 4.構(gòu)造函數(shù)可以重寫,可以在全局中添加新屬性和方法Person.prototype = {},但工廠函數(shù)只能在局部添加 各自適用場(chǎng)合: 構(gòu)造函數(shù):適應(yīng)用于大型項(xiàng)目,屬性以及方法時(shí)常變換的項(xiàng)目 工廠函數(shù):適應(yīng)用于小型項(xiàng)目,或者正在制作過程還沒有成型的項(xiàng)目

工廠模式 :

特點(diǎn):

1.顯示創(chuàng)建的對(duì)象

2.顯示返回的一個(gè)對(duì)象

3:缺點(diǎn) :無法判斷對(duì)象的類型

構(gòu)造函數(shù)的特點(diǎn):

1.沒有顯示的創(chuàng)建對(duì)象

2.隱式返回了新的對(duì)象

3.可以判斷對(duì)象類型(屬于這個(gè)構(gòu)造函數(shù))

4.缺點(diǎn):

因私有而冗余:所有的方法和屬性都會(huì)在實(shí)列上創(chuàng)建一遍


function Factory(name, age, sex, car) {
    this.name = name;
    this.age = age;
    this.sex = sex;
    this.car = car;
    this.eat = function (food) {
        console.log('吃' + food)
    }
}
var obj = new Factory('我是', 10, 'nan', 'ff')
console.log(obj)

模擬構(gòu)造函數(shù)創(chuàng)建對(duì)象(和上邊這個(gè)函數(shù)關(guān)聯(lián)著呢)

var obj = {};
Factory.call(obj, 'll', 18, '男');
obj._poroto_ = Factory.prototype;
console.log(obj)

原型模式

將屬性和方法都放在原型對(duì)象上


function Hyj() { }
console.log(Hyj.prototype);
Hyj.prototype.name = 'hyj';
Hyj.prototype.age = 18;
Hyj.prototype.sex = '男';
Hyj.prototype.eat = function (food) {
    console.log('吃' + food);
}

問題:

本質(zhì):因?yàn)楣蚕淼奶卣?,?dǎo)致原型上引用類型在各個(gè)實(shí)列上會(huì)影響

原型中所有屬性是被很多實(shí)列共享的

對(duì)于包含引用類型值的屬性來說,問題有點(diǎn)大

4.組合式 : 結(jié)構(gòu) + 原型

私有的屬性

function People(name, age, sex) {
this.name = name; this.age = age; this.sex = sex;
} // 共享的方法
People.prototype.eat = function (food) {
    console.log('吃' + food);
}
var a = new People(1, 2, 3)
console.log(a)

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

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

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