1. 程式人生 > >js創建對象的幾種方式

js創建對象的幾種方式

object類 true object 編寫 clas scrip type size fun

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)

js創建對象的幾種方式