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)