国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:02:28
文檔

JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】

JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】:本文實(shí)例總結(jié)了JavaScript創(chuàng)建對(duì)象方式。分享給大家供大家參考,具體如下: 這里主要是對(duì)《JavaScript高級(jí)程序設(shè)計(jì)》第六章(面向?qū)ο蟮某绦蛟O(shè)計(jì))的總結(jié),書(shū)上的這章至少看了4遍是有的。該章主要講對(duì)象的創(chuàng)建與繼承。其中創(chuàng)建對(duì)象和繼承方式至少6種,再加上
推薦度:
導(dǎo)讀JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】:本文實(shí)例總結(jié)了JavaScript創(chuàng)建對(duì)象方式。分享給大家供大家參考,具體如下: 這里主要是對(duì)《JavaScript高級(jí)程序設(shè)計(jì)》第六章(面向?qū)ο蟮某绦蛟O(shè)計(jì))的總結(jié),書(shū)上的這章至少看了4遍是有的。該章主要講對(duì)象的創(chuàng)建與繼承。其中創(chuàng)建對(duì)象和繼承方式至少6種,再加上

本文實(shí)例總結(jié)了JavaScript創(chuàng)建對(duì)象方式。分享給大家供大家參考,具體如下:

這里主要是對(duì)《JavaScript高級(jí)程序設(shè)計(jì)》第六章(面向?qū)ο蟮某绦蛟O(shè)計(jì))的總結(jié),書(shū)上的這章至少看了4遍是有的。該章主要講對(duì)象的創(chuàng)建與繼承。其中創(chuàng)建對(duì)象和繼承方式至少6種,再加上一些方法屬性,很容易搞得暈頭轉(zhuǎn)向的。因此有必要對(duì)本章的內(nèi)容理一理,以后忘了也好過(guò)來(lái)看一看。

由于文章長(zhǎng)度的限制,本文主要講創(chuàng)建對(duì)象。

1 創(chuàng)建對(duì)象

1.1 一般方法

使用Object或者采用對(duì)象字面量的方法。

var o = {a: 1};
var o2=new Object();
o2.a=1;

缺點(diǎn):使用同一個(gè)接口創(chuàng)建很多對(duì)象,會(huì)產(chǎn)生大量重復(fù)的代碼。

1.2工廠模式

function parent(name,age){
 var Child = new Object();
 Child.name=name;
 Child.age=age;
 Child.sayHi=function(){
 console.log("Hi");
 }
 return Child;
};
var x = Parent("Tom",12);
console.log(x.name); //Tom
x.sayHi(); //Hi

函數(shù)parent能夠根據(jù)接受的參數(shù)來(lái)構(gòu)建一個(gè)包含所有必要信息的child對(duì)象。可以無(wú)限次調(diào)用這個(gè)函數(shù),都會(huì)返回一個(gè)包含兩個(gè)屬性和一個(gè)方法的對(duì)象。

解決了創(chuàng)建多個(gè)相似對(duì)象的問(wèn)題,但卻沒(méi)有解決對(duì)象識(shí)別的問(wèn)題(即怎樣知道一個(gè)對(duì)象的類(lèi)型)。

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

對(duì)于構(gòu)造函數(shù)這個(gè)名字,學(xué)過(guò)java或者c++的同學(xué)應(yīng)該都是知道的,在js里也是差不多的。

用構(gòu)造函數(shù)將上面的例子重寫(xiě)如下:

function Parent(name,age){
 this.name=name;
 this.age=age;
 this.sayHi=function(){
 console.log("Hi");
 };
}
var x = new Parent("Tom",12);
console.log(x.name); //Tom
x.sayHi(); //Hi

對(duì)于構(gòu)造函數(shù),我們需要在調(diào)用的時(shí)候加關(guān)鍵字 new。要注意的是,構(gòu)造函數(shù)始終是以一個(gè)大寫(xiě)字母開(kāi)頭,而非構(gòu)造函數(shù)始終是以一個(gè)小寫(xiě)字母開(kāi)頭。

與工廠模式相比,主要有以下幾個(gè)不同之處:

  • 沒(méi)有顯示地創(chuàng)建對(duì)象;
  • 直接將屬性和方法賦給了this對(duì)象;
  • 沒(méi)有return語(yǔ)句。
  • 缺點(diǎn):使用構(gòu)造函數(shù)的缺點(diǎn)就是每個(gè)方法都需要在每個(gè)實(shí)例上重新創(chuàng)建一遍。

    1.4原型模式

    我們創(chuàng)建的每一個(gè)函數(shù)都有一個(gè)prototype(原型)屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,而這個(gè)對(duì)象的用途是包含可以由特定類(lèi)型的所有實(shí)例共享的屬性與方法。使用原型對(duì)象的好處是可以讓所有的對(duì)象實(shí)例共享其包含的屬性與方法。

    function Parent(name,age){
     Parent.prototype.name=name;
     Parent.prototype.age=age;
     Parent.prototype.sayHi=function(){
     console.log("Hi");
     };
    }
    var x = new Parent("Tom",12);
    console.log(x.name); //Tom
    x.sayHi(); //Hi
    
    

    缺點(diǎn):優(yōu)點(diǎn)就是其缺點(diǎn),方法屬性都可以共享。具體可以看下面這個(gè)例子

    function Parent(name,age){
     Parent.prototype.name=name;
     Parent.prototype.age=age;
     Parent.prototype.arr=["123","we"];
     Parent.prototype.sayHi=function(){
     console.log("Hi");
     };
    }
    var x = new Parent("Tom",12);
    var y = new Parent("Tom1",12);
    x.arr.push("x");
    y.arr.push("y");
    console.log(x.arr);//["123", "we", "x", "y"]
    console.log(y.arr);//["123", "we", "x", "y"]
    
    

    對(duì)象x修改自己的屬性,竟然會(huì)影響到y(tǒng)對(duì)象;同理,對(duì)y也一樣。這個(gè)明顯就很不合理啊,太可怕了!

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

    function Parent(name,age){
      //只把屬性留在這里定義,方法放在原型對(duì)象中
     this.name=name;
     this.age=age;
    }
    //第一種方式
    Parent.prototype.sayHi=function(){
     console.log("Hi");
    };
    //第二種方式
    //由于采用對(duì)象字面量,因此必須修正其constructor屬性;
    Parent.prototype={
     constructor:Parent,
     sayHi:function(){
     console.log("Hi");
     }
    }
    var x = new Parent("Tom",12);
    console.log(x.name); //Tom
    x.sayHi(); //Hi
    
    

    在這個(gè)例子中,實(shí)例屬性都是在構(gòu)造函數(shù)中定義的,而由所有實(shí)例共享的屬性constructor和方法則是在原型中定義的。

    是目前使用最廣泛、認(rèn)同度最高的一種創(chuàng)建自定義類(lèi)型的方法。

    --------------------------感覺(jué)后面幾種方法有些變態(tài)了--------------------------------

    1.6 動(dòng)態(tài)原型模式

    function Parent(name,age){
     this.name=name;
     this.age=age;
     if( typeof this.sayHi !="function"){
     Parent.prototype.sayHi=function(){
     console.log("Hi");
     };
     }
    }
    var x = new Parent("Tom",12);
    console.log(x.name); //Tom
    x.sayHi(); //Hi
    
    

    先檢查某個(gè)應(yīng)該存在方法是否有效再來(lái)決定是否需要初始化原型。

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

    當(dāng)前面幾種都不適用的情況下,可以使用寄生構(gòu)造函數(shù)模式。這種函數(shù)的基本思想是創(chuàng)建一個(gè)函數(shù),該函數(shù)的作用僅僅是封裝創(chuàng)建對(duì)象的代碼,然后再返回新創(chuàng)建的對(duì)象。

    function parent(name,age){
     var Child = new Object();
     Child.name=name;
     Child.age=age;
     Child.sayHi=function(){
     console.log("Hi");
     }
     return Child;
    };
    var x = Parent("Tom",12);
    console.log(x.name); //Tom
    x.sayHi(); //Hi
    
    

    但是其實(shí)就是和工廠模式一模一樣,你TM在逗我嗎?????

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

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

    function Parent(name,age){
     var o=new Object();
       //私有變量或者方法
     var name=name,
     age=age;
     o.sayName=function(){
         //name前面沒(méi)有this
     console.log(name+" "+age)
     }
     return o;
    }
    var x = Parent("Tom",12);
    x.sayName(); //Tom 12
    
    

    變量x中保存的是一個(gè)穩(wěn)妥對(duì)象,而除了調(diào)用sayName()方法外,沒(méi)有別的方式可以訪問(wèn)其數(shù)據(jù)成員。

    更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

    希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】

    JavaScript創(chuàng)建對(duì)象方式總結(jié)【工廠模式、構(gòu)造函數(shù)模式、原型模式等】:本文實(shí)例總結(jié)了JavaScript創(chuàng)建對(duì)象方式。分享給大家供大家參考,具體如下: 這里主要是對(duì)《JavaScript高級(jí)程序設(shè)計(jì)》第六章(面向?qū)ο蟮某绦蛟O(shè)計(jì))的總結(jié),書(shū)上的這章至少看了4遍是有的。該章主要講對(duì)象的創(chuàng)建與繼承。其中創(chuàng)建對(duì)象和繼承方式至少6種,再加上
    推薦度:
    標(biāo)簽: js 方式 對(duì)象
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專(zhuān)題
    Top
    主站蜘蛛池模板: 亚洲 欧美 日韩 综合 | 国产91系列 | 亚洲欧美日韩高清一区二区一 | 日韩视频欧美视频 | 国产精品v一区二区三区 | 欧美人在线一区二区三区 | 国产高清精品一级毛片 | 国产日韩欧美中文 | 国产青草视频在线观看 | 国产日产欧美精品一区二区三区 | 精品国产一区二区三区在线观看 | 欧美一区二区三区不卡免费 | 国产成人a一区二区 | 精品一区二区三区视频日产 | 日韩午夜在线视频 | 亚洲欧美韩日 | 国产精品成人va | 日韩www| 亚洲一页| 一区二区三区在线视频播放 | 最新国产精品精品视频 | 日韩视频欧美视频 | 亚洲日韩图片专区第1页 | 久久91av | 国产国拍亚洲精品午夜不卡17 | 日韩欧美第一页 | 国产一级视频在线观看 | 高龄五十路中出 | 亚洲第一页中文字幕 | 91亚洲 欧美 国产 制服 动漫 | 麻豆果冻国产91在线极品 | 精品成人一区二区三区免费视频 | 国产一区二区三区精品视频 | 精品国产自在在线在线观看 | 国内精品一区二区在线观看 | 国产精品福利久久久久久小说 | 热久久国产欧美一区二区精品 | 国产一区二区三区在线 | 九九爱精品视频 | 久久精品无遮挡一级毛片 | 国产麻豆自拍 |