成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS創(chuàng)建對(duì)象模式及其對(duì)象原型鏈探究(二):工廠模式

smartlion / 982人閱讀

摘要:工廠模式用函數(shù)來封裝,以特定接口創(chuàng)建對(duì)象的細(xì)節(jié)。缺點(diǎn)不能知道對(duì)象識(shí)別的問題對(duì)象的類型不知道。復(fù)雜的工廠模式定義是將其成員對(duì)象的實(shí)列化推遲到子類中,子類可以重寫父類接口方法以便創(chuàng)建的時(shí)候指定自己的對(duì)象類型。

工廠模式

用函數(shù)來封裝,以特定接口創(chuàng)建對(duì)象的細(xì)節(jié)。

1.創(chuàng)建對(duì)象
function createPerson(name, age, job){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.showName = function(){
        console.log(this.name);
    }
    return o;
}

var p1 = createPerson("Mike", 20, "student");
var p2 = createPerson("Tom", 23, "student");

// 返回都是object 無法識(shí)別對(duì)象的類型 不知道他們是哪個(gè)對(duì)象的實(shí)列
console.log(typeof p1);  // object
console.log(typeof p2);  // object
console.log(p1 instanceof Object); // true

輸出如圖:

函數(shù)能夠根據(jù)接收的參數(shù)來構(gòu)建一個(gè)包含所有信息的Person對(duì)象。

可以無數(shù)次地調(diào)用createPerson()這個(gè)函數(shù),每次它都會(huì)返回一個(gè)包含三個(gè)屬性、一個(gè)方法的對(duì)象。

工廠模式是為了解決多個(gè)類似對(duì)象聲明的問題;也就是為了解決實(shí)列化對(duì)象產(chǎn)生重復(fù)的問題。

優(yōu)點(diǎn):能解決多個(gè)相似的問題。

缺點(diǎn):不能知道對(duì)象識(shí)別的問題(對(duì)象的類型不知道)。

復(fù)雜的工廠模式定義是:將其成員對(duì)象的實(shí)列化推遲到子類中,子類可以重寫父類接口方法以便創(chuàng)建的時(shí)候指定自己的對(duì)象類型。

2.觀察實(shí)例對(duì)象的構(gòu)成
// 觀察p1對(duì)象的構(gòu)成
console.log(p1);
console.log("-----分割線-----");
// 觀察p1對(duì)象的構(gòu)成
console.log(p2);
console.log("-----分割線-----");


// 修改p1對(duì)象的屬性,并不會(huì)影響到p2對(duì)象的屬性,因?yàn)樗麄兪呛瘮?shù)createPerson()兩個(gè)獨(dú)立的實(shí)例對(duì)象
p1.age = 21;
console.log(p1.age);    //21
console.log(p2.age);    //23
console.log("p1 === p2:");
console.log(p1 === p2);

輸出如圖:

3.觀察person對(duì)象涉及到的原型鏈
// 對(duì)象是沒有prototype屬性的
console.log("p1.prototype=");
console.log(p1.prototype);
console.log("-----分割線-----");

// p1對(duì)象本質(zhì)上是o對(duì)象,即由Object構(gòu)造函數(shù)生成,所以其__proto__屬性指向Object.prototype
console.log("p1.__proto__=");
console.log(p1.__proto__);
console.log("-----分割線-----");

// 驗(yàn)證
console.log("p1.__proto__ === Object.prototype:");
console.log(p1.__proto__ === Object.prototype);
console.log("-----分割線-----");

console.log("p1.__proto__ === p2.__proto__:");
console.log(p1.__proto__ === p2.__proto__);
console.log("-----分割線-----");

輸出如圖:

4.觀察下p1.showName屬性引用的函數(shù)
console.log("p1.showName.prototype=");
console.log(p1.showName.prototype);
console.log("-----分割線-----");

console.log("p1.showName.prototype.constructor=");
console.log(p1.showName.prototype.constructor);
console.log("-----分割線-----");

console.log("p1.showName.prototype.__proto__=");
console.log(p1.showName.prototype.__proto__);
console.log(p1.showName.prototype.__proto__ === Object.prototype);
console.log("-----分割線-----");

console.log("p1.showName.__proto__=");
console.log(p1.showName.__proto__);
console.log(p1.showName.__proto__ === Function.prototype);
console.log("-----分割線-----");

輸出如圖:

原型鏈圖

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78979.html

相關(guān)文章

  • JS創(chuàng)建對(duì)象模式及其對(duì)象原型探究(三):構(gòu)造函數(shù)模式

    摘要:創(chuàng)建對(duì)象與工廠模式的區(qū)別沒有顯示地創(chuàng)建對(duì)象直接將方法和屬性付給了對(duì)象沒有語句構(gòu)造函數(shù)應(yīng)該始終以一個(gè)大寫字母開頭。創(chuàng)建構(gòu)造函數(shù)的實(shí)例,必須使用操作符。 構(gòu)造函數(shù)模式 ECMAScript中的構(gòu)造函數(shù)可用來創(chuàng)建特定類型的對(duì)象,像Object和Array這樣的原生構(gòu)造函數(shù)。也可以創(chuàng)建自定義的構(gòu)造函數(shù),從而定義自定義對(duì)象類型的屬性和方法。 1.創(chuàng)建對(duì)象 function Person(name...

    Martin91 評(píng)論0 收藏0
  • JS創(chuàng)建對(duì)象模式及其對(duì)象原型探究(一):Object模式

    摘要:對(duì)象是由構(gòu)造函數(shù)創(chuàng)建而成的,所以它的指向原型鏈圖對(duì)象的原型鏈圖對(duì)象屬性引用的匿名函數(shù)的原型鏈圖 Object模式 創(chuàng)建一個(gè)Object實(shí)例,再為其添加屬性和方法。 這是創(chuàng)建自定義對(duì)象最簡單的方式。 1.創(chuàng)建對(duì)象 // 創(chuàng)建person對(duì)象 var person = new Object(); person.name = Mike; person.age = 20; person.jo...

    李義 評(píng)論0 收藏0
  • JS創(chuàng)建對(duì)象模式及其對(duì)象原型探究(五):組合使用構(gòu)造函數(shù)模式原型模式

    摘要:組合使用構(gòu)造函數(shù)模式和原型模式構(gòu)造函數(shù)模式用于定義實(shí)例屬性,原型模式用于定義方法和共享的屬性。創(chuàng)建對(duì)象組合使用構(gòu)造函數(shù)模式和原型模式指向構(gòu)造函數(shù),這里要將其恢復(fù)為指向構(gòu)造函數(shù)。另外,這種混合模式,還支持向構(gòu)造函數(shù)傳遞參數(shù)。 組合使用構(gòu)造函數(shù)模式和原型模式 構(gòu)造函數(shù)模式用于定義實(shí)例屬性,原型模式用于定義方法和共享的屬性。 創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式和原型模式。 ...

    Shimmer 評(píng)論0 收藏0
  • JS創(chuàng)建對(duì)象模式及其對(duì)象原型探究(四):原型模式

    摘要:原型模式定義構(gòu)造函數(shù),在構(gòu)造函數(shù)的原型對(duì)象中定義對(duì)象的屬性和方法,并通過構(gòu)造函數(shù)創(chuàng)建對(duì)象。,屬性存在于實(shí)例對(duì)象中,屬性不存在于實(shí)例對(duì)象中分割線操作符會(huì)在通過對(duì)象能夠訪問給定屬性時(shí)返回,無論該屬性是存在于實(shí)例中還是原型中。 原型模式 定義構(gòu)造函數(shù),在構(gòu)造函數(shù)的原型對(duì)象中定義對(duì)象的屬性和方法,并通過構(gòu)造函數(shù)創(chuàng)建對(duì)象。 1.創(chuàng)建對(duì)象 function Person(){}; Person....

    ruicbAndroid 評(píng)論0 收藏0
  • js知識(shí)梳理3:創(chuàng)建對(duì)象模式探究

    摘要:起因構(gòu)造函數(shù)對(duì)象字面量都可以用來創(chuàng)建單個(gè)對(duì)象,但有明顯缺點(diǎn)使用同一個(gè)接口創(chuàng)建很多對(duì)象,會(huì)產(chǎn)生大量的重復(fù)代碼。組合使用構(gòu)造函數(shù)模式和原型模式創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式與原型模式。 寫在前面 注:這個(gè)系列是本人對(duì)js知識(shí)的一些梳理,其中不少內(nèi)容來自書籍:Javascript高級(jí)程序設(shè)計(jì)第三版和JavaScript權(quán)威指南第六版,感謝它們的作者和譯者。有發(fā)現(xiàn)什么問題...

    MrZONT 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<