js建立物件的幾種方式

lonecloud發表於2017-09-24

1.通過new Object建立物件

作用範圍:
用於屬性名字和屬性值不能確定的地方
優點:
  編寫方便
缺點:
1.需要寫大量程式碼
2.建立出來的物件都是Object物件
    var obj = new Object();
    obj.name = "張三"
    obj.age = 12;
    obj.setName=function (name) {
        this.name=name;
    }
    log(obj.name, obj.age);

 2.使用{}建立物件

適用場景:
適用於確定物件,確定方法,不需要建立很多個物件
優點:
書寫方便
缺點:
1.不利於擴充套件性
2.每次建立物件還需要有很多重複性的工作
3.浪費記憶體
   var obj = {
        name: "張三",
        age: 12,
        setName: function (name) {
            this.name = name;
        }
    }
    log(obj.name,obj.age)

 3.使用工廠方法建立物件

適用場景:
用於有固定的屬性的物件進行建立,不用在意其建立的物件是不是Object型別還是自定義型別
優點:
建立速度快,程式碼便捷
缺點:
浪費記憶體
所有例項都是Object的例項物件
    function createPerson(name, age) {
        return {
            name: name,
            age: age,
            setName: function (name) {
                this.name = name;
            }
        }
    }
    var p=createPerson("張三",12);
    log(p.name,p.age);

 4.使用函式建立物件

適用範圍:
用於建立多個物件,並且有自己的例項物件屬性
優點:
不是一直都是Object物件,可以是自己建立的物件
缺點:
1.浪費記憶體,特別是公用方法
    function Person(name,age) {
        this.name=name;
        this.age=age;
        this.setName=function (name) {
            this.name=name;
        }
    }
    var p=new Person("張三",11);
    log(p.name,p.age)

 5.原型鏈和函式進行建立物件

適用場景:
用於對於有公共方法的物件
優點:
優化記憶體,將方法放在了prototype中
缺點:
未涉及欄位
    function Person(name,age) {
        this.name=name;
        this.age=age;
    }
    Person.prototype.setName=function (name) {
        this.name=name;
    }
    var p=new Person("小米",12);
    log(p);
    log(p instanceof Person)

 

相關文章