js創建對象的方法以及優缺點

js創建對象的方法以及優缺點

前言

hello! 大家好,本人是一名剛入行的菜逼前端開發程序員,希望能通過博客能學到更多東西或是能讓他人能學到東西,與更多擁有共同興趣愛好的同仁一起交流學習,一起談理想談人生,所以下決心開始寫博客。如果有哪裏寫的不正確或是不合理的地方還請各位多多指教,評論或是留言指正。

萬事開頭難,也糾結了一番,第一篇博客寫些什麼,首先想到的是對象,因爲在編程過程中,有了對象,可以創造一個世界,在現實生活中,有了對象有了對象可以創造一個民族!

所以第一篇文章要寫的是我自己總結的《js創建對象的方法以及優缺點》

  1. 直接創建
  2. 工廠模式
  3. 構造函數
  4. 原型方式
  5. 構造和原型的混合方式
  6. 動態原型方式

直接創建

        var man={
            name:'key',
            age:18,
            sex:'男',
            say:function(){
                alert('hello world');
            }
        }

優點:簡單快速。
缺點:限制了對象的重用。

工廠模式

        function createMan(name,age,sex){
            var man=new Object();
            man.name=name;
            man.age=age;
            man.sex=sex;
            man.say=function(){
                alert('hello world');
            }
            return man;
        }
        var key=createMan('key',18,'男');

優點:使用這種方法能夠不斷重複的創建對象。
缺點:無法識別對象類型,每個對象都有自己的say 函數,不能共享同一個函數,造成內存的浪費。

構造函數

        function Man(name,age,sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
            this.say=function(){
                alert('hello world');
            }
        }
        var key=new Man('key',18,'男');

優點:使用這種方法能夠重複的創建對象,並且能夠識別對象的類型。
缺點:每個對象都有自己的say 函數,不能共享同一個函數,造成內存的浪費。

原型方式

        function Man(){};
        Man.prototype.name='key';
        Man.prototype.age=18;
        Man.prototype.sex='男';
        Man.prototype.say=function(){
            alert('hello world');
        };
        var key=new Man();

優點:能夠共享一個函數。
缺點:構造函數沒有參數,不能通過構造函數初始化屬性值;屬性是對象時被多個實例共享容易產生問題。

構造和原型的混合方式

        function Man(name,age,sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
        }
        Man.prototype.say=function(){//寫在構造方法外面
            alert('hello world');
        }
        var key=new Man('key',18,'男');

優點:所有非函數屬性都在構造函數創建,可以用構造函數賦予屬性默認值,所有實例共享一個方法,沒有浪費內存,沒有副作用【推薦】。

動態原型方式

        function Man(name,age,sex){
            this.name=name;
            this.age=age;
            this.sex=sex;
            if(typeof Man.init=='undefined'){
                Man.prototype.say=function(){
                    alert('hello world');
                }
                Man.init=true;
            }
            //這裏將Man.prototype.say寫在了構造方法裏面,只爲了更友好的編碼風格。
            //這裏的Man.init是私有屬性,目的在於使Man.prototype.say創建並只執行一次,其實就是一個標誌位,一旦Man.init=true,就不滿足條件,就不再執行了。
        }
        var key=new Man('key',18,'男');

優點:動態原型創建對象的方法與構造函數和原型混合方式相同,即在構造函數內定義非函數屬性,而函數屬性則利用原型屬性定義。唯一的區別是賦予對象方法的位置,即提供更友好的編碼風格。

總結

好了,以上就是我個人總結的js創建對象的方法以及優缺點,也是自己博客的處女作,希望能夠對大家能有所幫助,如有不正確或是不合理或是不足的地方還請批評指出,評論或留言給我,我再將其改正過來。

目錄

瀏覽器兼容

  1. 所有主流瀏覽器都兼容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章