js創建對象的多種方式及優缺點


在js中,如果你想輸入一個的信息,例如姓名,性別,年齡等,如果你用值類型來存儲的話,那么你就必須要聲明很多個變量才行,變量聲明的多了的話,就會造成變量污染。所以最好的方式就是存儲到對象中。下面能我就給大家介紹幾種創建對象的方式,並且給大家說一下他們的優缺點

方式一:對象字面量

var obj={
                name:"趙雲",
                type:"突進",
                skill:"搶人頭"
            }

缺點:只能創建一次對象,復用性較差,如果要創建多個對象,代碼冗余度太高

 

方式二:使用內置構造函數

var obj=new Object();
                obj.name="李白";
                obj.type="刺客";
                obj.skill="舞劍";

 

缺點:只能創建一次對象,復用性較差,如果要創建多個對象,代碼冗余度太高

方式三:工廠模式(不推薦使用)

function creat(name,type,skill){
            var obj=new Object();
                obj.name=name;
                obj.type=type;
                obj.skill=skill;
                obj.say=function(){
                    console.log("黃河之水天上來");
                }
                return obj;
        }
        var hero=creat("李白","刺客","寫詩");
        var heroNext=creat("趙雲","突進","將軍");

 

缺點:對象無法識別,因為所有的實例都指向一個原型

方法四:構造函數模式

function Person(singer,song,type){
            //默認吧this傳給new出來的對象,並且默認是返回該對象
            this.singer=singer;
            this.song=song;
            this.type=type;
        }
        var obj=new Person("田馥甄","小幸運","流行歌");
        console.log(obj);

注意點:1.如果不寫返回值,默認返回的是新創建出來的對象 (一般都不會去寫這個return語句)

     2.如果我們自己寫return語句 return的是空值(return;),或者是基本類型的值或者null,都會默認返回新創建出來的對象

     3.如果返回的是object類型的值,將不會返回剛才新創建的對象,取而代之的是return后面的值

優點:實例時可以識別為一個特定的類型

缺點:構造函數中定義函數,那么每次創建對象,都會重新創建該函數,這樣會導致全局變量增多,造成污染,代碼結構會混亂,不易維護

方法五:原型

 function Person(name, age, gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;

        }
        var p =new Person("張學友",18,"male");
        var p1 = new Person("劉德華",19,"male");
        Person.prototype.sayHello = function () {
            console.log("你好我是" + this.name);
        }
        Person.prototype["sing"] = function () {
            console.log("一千個傷心的母牛");
        }
        p.sayHello();
        p1.sayHello();
        p.sing();
        p1.sing();

優點:說明:構造函數的原型對象中的成員,可以被該構造函數創建出來的所有對象訪問,而且,所有的對象共享該對象,所以,我們可以將構造函數中需要創建的函數,放到原型對象中存儲,這樣就解決 全局變量污染的問題 以及 代碼結構混亂的問題

缺點:不能初始化參數

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM