国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Render / 2098人閱讀

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

1、工廠模式

沒有解決對象識別的問題(即怎樣知道一個(gè)對象的類型)

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ù)的主要問題,就是每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍。通過把函數(shù)定義轉(zhuǎn)移到構(gòu)造函數(shù)外部來解決這個(gè)問題

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");

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

3、原型模式

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

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)建自定義類型的最常見方式就是組合使用構(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)原型模式

通過檢查某個(gè)應(yīng)該存在的方法是否有效來決定是否需要初始化原型;
注意:使用動(dòng)態(tài)原型模式時(shí),不能使用對象字面量重寫原型。如果在已經(jīng)創(chuàng)建了實(shí)例的情況下重寫原型,那么就會(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)建對象的代碼,然后再返回新創(chuàng)建的對象;
除了使用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ù)類似的模式,但有兩點(diǎn)不同:
(1)新創(chuàng)建對象的實(shí)例方法不引用this;
(2)不使用new操作符調(diào)用構(gòu)造函數(shù)。

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

    //添加函數(shù)
    o.sayName = function() {
        alert(name);      //注意寄生構(gòu)造函數(shù)中是alert(this.name)
    };
    //返回對象
    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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/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í)行給定對象的淺復(fù)制。 1、原型鏈實(shí)現(xiàn)繼承 function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = func...

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

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

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

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

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

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

    lscho 評論0 收藏0
  • 《JavaScript語言精粹 修訂版》 讀書筆記

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

    EscapedDog 評論0 收藏0

發(fā)表評論

0條評論

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