茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    淺析創(chuàng)建javascript對象的方法
    來源:易賢網(wǎng) 閱讀:984 次 日期:2016-07-01 11:18:48
    溫馨提示:易賢網(wǎng)小編為您整理了“淺析創(chuàng)建javascript對象的方法”,方便廣大網(wǎng)友查閱!

    下面小編就為大家?guī)硪黄獪\析創(chuàng)建javascript對象的方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。

    一、工廠模式

    function person (name,age) {

      var p=new Object();

      p.name=name;

      p.age=age;

      p.showMessage=function(){

        console.log("name:"+this.name+" age:"+this.age);

      }

      return p;

    }

    var p1=person("k1",28);

    var p2=person("k2",29);

    console.log(p1.showMessage==p2.showMessage);//false 不是同一個showMessage方法

    console.log(p1.constructor);//[object] 都是object

    工廠模式的缺陷是:沒解決對象識別的問題,而且每個對象的showMessage方法都不是同一個方法(每個方法在每個對象實(shí)例上都重新創(chuàng)建了一遍),增加了開銷

    二、構(gòu)造函數(shù)模式

    function Person (name,age) {

      this.name=name;

      this.age=age;

      this.showMessage=function(){

        console.log("name:"+this.name+" age:"+this.age);

      }

    }

    var p1=new Person("k1",28);

    var p2=new Person("k2",29);

    console.log(p1.showMessage==p2.showMessage);//false 不是同一個showMessage方法

    console.log(p1.constructor);//[Person]

    console.log(p1 instanceof Person);// true

    構(gòu)造函數(shù)模式解決了對象識別的問題,但是每個對象的showMessage方法不是同一個方法(每個方法在每個對象實(shí)例上都重新創(chuàng)建了一遍),增加了開銷

    三、原型模式

    function Person () {

    }

    Person.prototype.name ="k";

    Person.prototype.age =29;

    Person.prototype.showMessage=function () {

      console.log("name:"+this.name+" age:"+this.age);

    };

    var p1=new Person();

    p1.showMessage();//name:k age:29

    var p2=new Person();

    p2.showMessage();//name:k age:29

    console.log(p1.showMessage==p2.showMessage);// true --引用的是同一函數(shù)

    console.log(p1.constructor)//[Person] --對象識別

    console.log(p1 instanceof Person)//true --對象識別

    console.log(Person.prototype.isPrototypeOf(p1));// true

    console.log(Object.getPrototypeOf(p1)==Person.prototype);// true

    原型模式解決了“每個方法在每個對象實(shí)例上都重新創(chuàng)建了一遍”的問題,也解決了對象識別的問題

    原型模式有個很大的問題是,因?yàn)閽燧d在函數(shù)prototype下面的所有對象、變量、函數(shù)都是被該函數(shù)的所有實(shí)例共享的,雖然通過實(shí)例p1、p2可以訪問到prototype的屬性,但是卻不能修改屬性值,例如p1.name="k1",只是在p1實(shí)例上添加了一個name="k1"的屬性,并沒改到prototype.name。如果是值類型還好,如果是引用類型的話,就會有問題了,看如下的例子

    function Person () {  

    };

    Person.prototype.age =10;

    Person.prototype.array=[1,2,3];

    var p1=new Person();

    var p2=new Person();

    console.log(p1.array);// [1,2,3]

    console.log(p2.array); //[1,2,3]

    p1.array.push(4);

    console.log(p1.array);//[1,2,3,4]

    console.log(p2.array);//[1,2,3,4]

    p1往array里面添加了值,在p2也反映出來了,因?yàn)樗麄兌际侵赶蛲粋€array

    四、組合使用構(gòu)造函數(shù)模式和原型模式

    這是最常見的創(chuàng)建對象的方式,結(jié)合了構(gòu)造函數(shù)和原型模式的優(yōu)點(diǎn)

    function Person (name,age) {

      this.name=name;

      this.age=age;

    }

    Person.prototype.showMessage = function() {

      console.log("name:"+this.name+" age:"+this.age);

    };

    var p1=new Person("k",30);

    p1.showMessage();

    五、動態(tài)原型模式

    主要是解決:把所有的信息都封裝在構(gòu)造函數(shù)中,更符合oo的思想

    function Person (name,age) {

      this.name=name;

      this.age=age;

      if(typeof this.showMessage!="function"){

        Person.prototype.showMessage=function(){

          console.log("name:"+this.name+" age:"+this.age);

        }

      }

    }

    var p1=new Person("k",30);

    p1.showMessage();

    六、寄生構(gòu)造函數(shù)模式 

    function Person (name,age) {

      var o=new Object();

      o.name=name;

      o.age=age;

      o.sayName=function(){

        console.log(this.name);

      };

      return o;

    }

    var p1=new Person("k",28);

    p1.sayName();

    寄生構(gòu)造函數(shù)模式和工廠模式是一模一樣的,只不過創(chuàng)建對象的時候使用了new 關(guān)鍵字,上例:var p1=new Person("k",28)。

    它的主要作用是:在這個構(gòu)造函數(shù)里面進(jìn)行功能的擴(kuò)展,例如,我想定義一個數(shù)組類型MyArray,它是以Array數(shù)組為基礎(chǔ)的,有一個自己的方法,如下

    function MyArray(){

      var values=new Array();

      values.push.apply(values,arguments);

      //自己定義的方法

      values.toPipedString=function(){ 

        return this.join('|');

      };

      return values;

    }

    var colors=new MyArray("red","blue","green");

    console.log(colors.toPipedString());

    console.log(colors instanceof Array);

    七、穩(wěn)妥構(gòu)造函數(shù)模式

    穩(wěn)妥構(gòu)造函數(shù)遵循與寄生構(gòu)造函數(shù)類型的模式,但有兩點(diǎn)不同:一是不使用this,二是不使用new 調(diào)用構(gòu)造函數(shù)

    function Person (name,age) {

      var o=new Object();

      var tempAge=age;

      o.name=name;

      o.age=age;

      o.sayName=function(){

        console.log(name);

      }

      o.sayAge=function(){

        console.log(tempAge);

      }

      return o;

    }

    var p1=Person("k1",28);

    p1.sayName(); // k1

    p1.sayAge(); // 28

    p1.name="k2";

    p1.age=30;

    p1.sayName(); // k1

    p1.sayAge();  //28

    看到如上的輸出就很好理解什么叫穩(wěn)妥對象模式了,就是用這種模式創(chuàng)建的對象,沒有其他辦法能夠改變初始化時候傳入的值,這里是Person("k1",28),這樣的對象就是穩(wěn)妥對象,實(shí)際上這里使用到就是javascript的閉包了。

    以上這篇淺析創(chuàng)建javascript對象的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:淺析創(chuàng)建javascript對象的方法
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報(bào)班

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)