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

資訊專(zhuān)欄INFORMATION COLUMN

JS學(xué)習(xí)筆記(第6章)(創(chuàng)建對(duì)象的7種模式)

Render / 2104人閱讀

摘要:工廠模式?jīng)]有解決對(duì)象識(shí)別的問(wèn)題即怎樣知道一個(gè)對(duì)象的類(lèi)型構(gòu)造函數(shù)模式使用構(gòu)造函數(shù)的主要問(wèn)題,就是每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍。創(chuàng)建要返回的對(duì)象可以在這里定義私有變量和函數(shù)添加函數(shù)注意寄生構(gòu)造函數(shù)中是返回對(duì)象注意寄生構(gòu)造函數(shù)中是

1、工廠模式

沒(méi)有解決對(duì)象識(shí)別的問(wèn)題(即怎樣知道一個(gè)對(duì)象的類(lèi)型)

function createPerson(name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        alert(this.name);
    };
    return o;
}
var person1 = createPerson("Nicholas",29,"Software Engineer");
2、構(gòu)造函數(shù)模式

使用構(gòu)造函數(shù)的主要問(wèn)題,就是每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍。通過(guò)把函數(shù)定義轉(zhuǎn)移到構(gòu)造函數(shù)外部來(lái)解決這個(gè)問(wèn)題

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function() {
        alert(this.name);
    };
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
//把函數(shù)定義轉(zhuǎn)移到構(gòu)造函數(shù)外部
function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = sayName;
}
function sayName(){
    alert(this.name);
}
var person1 = new Person("Nicholas", 29, "Software Engineer");

如果對(duì)象需要定義很多方法,那么就要定義很多個(gè)全局函數(shù),于是我們這個(gè)自定義的引用類(lèi)型就絲毫沒(méi)有封裝性可言了。

3、原型模式

原型對(duì)象的好處是可以讓所有對(duì)象實(shí)例共享它所包含的屬性和方法;
原型模式最大的問(wèn)題是由其共享的本性導(dǎo)致的:對(duì)于那些包含基本值的屬性可以通過(guò)在實(shí)例上添加一個(gè)同名屬性,可以隱藏原型中的對(duì)應(yīng)屬性,但是對(duì)于包含引用類(lèi)型值的屬性來(lái)說(shuō),問(wèn)題就很突出了。

function Person(){
}
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
    alert(this.name);
};
var person1 = new Person();
person1.sayName();
4、組合使用構(gòu)造函數(shù)模式和原型模式

創(chuàng)建自定義類(lèi)型的最常見(jiàn)方式就是組合使用構(gòu)造函數(shù)模式與原型模式;
構(gòu)造函數(shù)模式用于定義實(shí)例屬性,而原型模式用于定義方法和共享的屬性。

function Person(name, age, job){
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];
}

Person.prototype = {
    constructor : Person,
    sayName : function() {
        alert(this.name);
    }
}
var person1 = new Person("Nicholas",29,"Software Engineer");
5、動(dòng)態(tài)原型模式

通過(guò)檢查某個(gè)應(yīng)該存在的方法是否有效來(lái)決定是否需要初始化原型;
注意:使用動(dòng)態(tài)原型模式時(shí),不能使用對(duì)象字面量重寫(xiě)原型。如果在已經(jīng)創(chuàng)建了實(shí)例的情況下重寫(xiě)原型,那么就會(huì)切斷現(xiàn)有實(shí)例與新原型之間的聯(lián)系;

function Person(name, age, job) {
    this.name = name;
    this.aghe = age;
    this.job = job;
    if(typeof  this.sayName !="function") {
        Person.prototype.sayName = function(){
            alert(this.name);
        };
    }
}
var friend = new Person("Nicholas",29,"Software Engineer");
6、寄生構(gòu)造函數(shù)模式

封裝創(chuàng)建對(duì)象的代碼,然后再返回新創(chuàng)建的對(duì)象;
除了使用new操作符并把使用的包裝函數(shù)叫做構(gòu)造函數(shù)之外,這個(gè)模式和工廠模式其實(shí)是一模一樣的

function Person (name, age, job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        alert(this.name);
    };
    return o;
}
var friend = new Person("Nicholas", 29, "Software Engineer");
7、穩(wěn)妥構(gòu)造函數(shù)模式

穩(wěn)妥構(gòu)造函數(shù)遵循與寄生構(gòu)造函數(shù)類(lèi)似的模式,但有兩點(diǎn)不同:
(1)新創(chuàng)建對(duì)象的實(shí)例方法不引用this;
(2)不使用new操作符調(diào)用構(gòu)造函數(shù)。

function Person(name, age, job) {
    var o = new Object();  //創(chuàng)建要返回的對(duì)象
    //可以在這里定義私有變量和函數(shù)
    o.name = name;
    o.age = age;
    o.job= job;

    //添加函數(shù)
    o.sayName = function() {
        alert(name);      //注意寄生構(gòu)造函數(shù)中是alert(this.name)
    };
    //返回對(duì)象
    return o;
}
//注意寄生構(gòu)造函數(shù)中是var friend = newPerson("Nicholas", 29, "Software Engineer"); 
var friend = Person("Nicholas", 29, "Software Engineer");  
friend.sayName();  //"Nicholas"



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

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

相關(guān)文章

  • JS學(xué)習(xí)筆記6)(實(shí)現(xiàn)繼承方式)

    摘要:使用最多的繼承模式是組合繼承,這種模式使用原型鏈繼承共享的屬性和方法,而借用構(gòu)造函數(shù)繼承實(shí)例屬性。原型式繼承,可以在不必預(yù)先定義構(gòu)造函數(shù)的情況下實(shí)現(xiàn)繼承,其本質(zhì)是執(zhí)行給定對(duì)象的淺復(fù)制。 1、原型鏈實(shí)現(xiàn)繼承 function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = func...

    hiyayiji 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記7)(函數(shù)表達(dá)式)

    摘要:遞歸閉包模仿塊級(jí)作用域私有變量小結(jié)在編程中,使用函數(shù)表達(dá)式可以無(wú)需對(duì)函數(shù)命名,從而實(shí)現(xiàn)動(dòng)態(tài)編程。匿名函數(shù)也稱(chēng)為拉姆達(dá)函數(shù)。函數(shù)聲明要求有名字,但函數(shù)表達(dá)式不需要。中的函數(shù)表達(dá)式和閉包都是極其有用的特性,利用它們可以實(shí)現(xiàn)很多功能。 1、遞歸 2、閉包 3、模仿塊級(jí)作用域 4、私有變量 5、小結(jié) 在JavaScript編程中,使用函數(shù)表達(dá)式可以無(wú)需對(duì)函數(shù)命名,從而實(shí)現(xiàn)動(dòng)態(tài)編程。匿名函數(shù)也稱(chēng)...

    xiaokai 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記5)(String類(lèi)型)

    摘要:字符串大小寫(xiě)轉(zhuǎn)換方法和則是針對(duì)特定地區(qū)的實(shí)現(xiàn)??梢曰谥付ǖ姆指舴麑⒁粋€(gè)字符串分割成多個(gè)子字符串,并將結(jié)果放在一個(gè)數(shù)組中將字符串轉(zhuǎn)換為數(shù)組。分隔符可以是字符串,也可以是一個(gè)對(duì)象。 1、對(duì)象創(chuàng)建 String類(lèi)型是字符串的對(duì)象包裝類(lèi)型,可以像下面這樣使用String構(gòu)造函數(shù)來(lái)創(chuàng)建。 var stringObject = new String(hello world); String對(duì)象...

    rose 評(píng)論0 收藏0
  • JS學(xué)習(xí)筆記6)(面向對(duì)象之繼承——JS繼承六大方式)

    摘要:除此之外,在超類(lèi)型的原型中定義的方法,對(duì)子類(lèi)型而言也是不可兼得,結(jié)果所有類(lèi)型都只能用構(gòu)造函數(shù)模式。創(chuàng)建對(duì)象增強(qiáng)對(duì)象指定對(duì)象繼承屬性這個(gè)例子的高效率體現(xiàn)在它只調(diào)用了一次構(gòu)造函數(shù)。 1、原型鏈 原型鏈的基本思想是利用原型讓一個(gè)引用類(lèi)型繼承另一個(gè)引用類(lèi)型的屬性和方法。構(gòu)造函數(shù)、原型和實(shí)例的關(guān)系:每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象;原型對(duì)象都包含著一個(gè)指向構(gòu)造函數(shù)的指針;實(shí)例都包含一個(gè)指向原型對(duì)象的...

    lscho 評(píng)論0 收藏0
  • 《JavaScript語(yǔ)言精粹 修訂版》 讀書(shū)筆記

    摘要:于是我就先把這本薄的經(jīng)典書(shū)語(yǔ)言精粹修訂版豆瓣讀書(shū)本書(shū)簡(jiǎn)介總共章,除去附錄,才頁(yè),讀完并記錄了一些筆記。讀書(shū)筆記還可以分享給別人看。編程語(yǔ)言第版定義了的標(biāo)準(zhǔn)。程序檢查時(shí)丟棄值為函數(shù)的屬性。 之前看到這篇文章,前端網(wǎng)老姚淺談:怎么學(xué)JavaScript?,說(shuō)到怎么學(xué)習(xí)JavaScript,那就是看書(shū)、分析源碼。10本書(shū)讀2遍的好處,應(yīng)該大于一本書(shū)讀20遍。看書(shū)主動(dòng)學(xué)習(xí),看視頻是被動(dòng)學(xué)習(xí)。看...

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

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

0條評(píng)論

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