<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】

        來源:懂視網 責編:小采 時間:2020-11-27 22:02:28
        文檔

        JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】

        JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】:本文實例總結了JavaScript創建對象方式。分享給大家供大家參考,具體如下: 這里主要是對《JavaScript高級程序設計》第六章(面向對象的程序設計)的總結,書上的這章至少看了4遍是有的。該章主要講對象的創建與繼承。其中創建對象和繼承方式至少6種,再加上
        推薦度:
        導讀JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】:本文實例總結了JavaScript創建對象方式。分享給大家供大家參考,具體如下: 這里主要是對《JavaScript高級程序設計》第六章(面向對象的程序設計)的總結,書上的這章至少看了4遍是有的。該章主要講對象的創建與繼承。其中創建對象和繼承方式至少6種,再加上

        本文實例總結了JavaScript創建對象方式。分享給大家供大家參考,具體如下:

        這里主要是對《JavaScript高級程序設計》第六章(面向對象的程序設計)的總結,書上的這章至少看了4遍是有的。該章主要講對象的創建與繼承。其中創建對象和繼承方式至少6種,再加上一些方法屬性,很容易搞得暈頭轉向的。因此有必要對本章的內容理一理,以后忘了也好過來看一看。

        由于文章長度的限制,本文主要講創建對象。

        1 創建對象

        1.1 一般方法

        使用Object或者采用對象字面量的方法。

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

        缺點:使用同一個接口創建很多對象,會產生大量重復的代碼。

        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
        
        

        函數parent能夠根據接受的參數來構建一個包含所有必要信息的child對象。可以無限次調用這個函數,都會返回一個包含兩個屬性和一個方法的對象。

        解決了創建多個相似對象的問題,但卻沒有解決對象識別的問題(即怎樣知道一個對象的類型)。

        1.3構造函數模式

        對于構造函數這個名字,學過java或者c++的同學應該都是知道的,在js里也是差不多的。

        用構造函數將上面的例子重寫如下:

        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
        
        

        對于構造函數,我們需要在調用的時候加關鍵字 new。要注意的是,構造函數始終是以一個大寫字母開頭,而非構造函數始終是以一個小寫字母開頭。

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

      1. 沒有顯示地創建對象;
      2. 直接將屬性和方法賦給了this對象;
      3. 沒有return語句。
      4. 缺點:使用構造函數的缺點就是每個方法都需要在每個實例上重新創建一遍。

        1.4原型模式

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

        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
        
        

        缺點:優點就是其缺點,方法屬性都可以共享。具體可以看下面這個例子

        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"]
        
        

        對象x修改自己的屬性,竟然會影響到y對象;同理,對y也一樣。這個明顯就很不合理啊,太可怕了!

        1.5組合使用構造函數模式和原型模式

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

        在這個例子中,實例屬性都是在構造函數中定義的,而由所有實例共享的屬性constructor和方法則是在原型中定義的。

        是目前使用最廣泛、認同度最高的一種創建自定義類型的方法。

        --------------------------感覺后面幾種方法有些變態了--------------------------------

        1.6 動態原型模式

        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
        
        

        先檢查某個應該存在方法是否有效再來決定是否需要初始化原型。

        1.7寄生構造函數模式

        當前面幾種都不適用的情況下,可以使用寄生構造函數模式。這種函數的基本思想是創建一個函數,該函數的作用僅僅是封裝創建對象的代碼,然后再返回新創建的對象。

        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
        
        

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

        1.8穩妥構造函數模式

        穩妥構造函數遵循與寄生構造函數模式類似的模式,但有兩點不同:一是新創建對象的實例方法不引用this; 二是不使用new操作調用構造函數。

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

        變量x中保存的是一個穩妥對象,而除了調用sayName()方法外,沒有別的方式可以訪問其數據成員。

        更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

        希望本文所述對大家JavaScript程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】

        JavaScript創建對象方式總結【工廠模式、構造函數模式、原型模式等】:本文實例總結了JavaScript創建對象方式。分享給大家供大家參考,具體如下: 這里主要是對《JavaScript高級程序設計》第六章(面向對象的程序設計)的總結,書上的這章至少看了4遍是有的。該章主要講對象的創建與繼承。其中創建對象和繼承方式至少6種,再加上
        推薦度:
        標簽: js 方式 對象
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品线在线观看| 国产亚洲精品a在线无码| 亚洲精品不卡视频| 免费观看国产网址你懂的| 亚洲色图在线播放| 曰批视频免费40分钟试看天天| 亚洲av最新在线网址| 日本免费在线中文字幕| 亚洲阿v天堂在线| 午夜精品射精入后重之免费观看| 亚洲AV无码一区东京热| 84pao强力永久免费高清 | 亚洲成av人片不卡无码久久| 亚洲风情亚Aⅴ在线发布| 全黄a免费一级毛片人人爱| 男女猛烈无遮掩视频免费软件| 亚洲国产精品一区二区九九 | 久久亚洲精品国产亚洲老地址| 蜜臀91精品国产免费观看| 激情吃奶吻胸免费视频xxxx| 亚洲中文字幕在线第六区| 久久永久免费人妻精品下载| 亚洲AV一二三区成人影片| 国产午夜免费福利红片| 韩国免费A级毛片久久| 亚洲理论精品午夜电影| 在线免费观看污网站| 久草免费福利在线| 亚洲女人影院想要爱| 国产又大又长又粗又硬的免费视频 | 中文字幕无码一区二区免费| 亚洲精品国产福利在线观看| 国产精品免费_区二区三区观看| 国产精品一区二区三区免费| 亚洲视频国产精品| 四虎精品亚洲一区二区三区| 好紧我太爽了视频免费国产| 亚洲国产精品网站在线播放| 亚洲精品无码久久久久sm| 女人18毛片水真多免费播放| a级毛片免费播放|