1、Object構造函數 此方法的缺點十分明顯那就是要寫大量的代碼。 2、對象字面量創建 字面量的缺點是當我i們創建多個相似的對象的時候,它仍然不夠靈活,依然會產生重覆代碼。 3、工廠模式 console.log(person('tom', 18)) console.log(person('jony ...
1、Object構造函數
var obj = new Object(); obj.name = 'tom'; obj.age = 15; obj.sayName = function() { console.log(this.name) }
此方法的缺點十分明顯那就是要寫大量的代碼。
2、對象字面量創建
var obj1 = { name: 'tom', age: 15, sayName: function() { console.log(this.name) } } var obj2 = { name: 'jock', age: 18, sayName: function() { console.log(this.name) } }
字面量的缺點是當我i們創建多個相似的對象的時候,它仍然不夠靈活,依然會產生重覆代碼。
3、工廠模式
function person(name, age) { var obj = { name: name, age: age, sayName: function() { console.log(this.name) } } return obj }console.log(person('tom', 18)) console.log(person('jony', '19'))
工廠函數的問題在於它所創建的對象沒有具體的類型,所有通過工廠函數所創建的對象的類型都是Object
4、構造函數方式
function Person(name, age) { this.name = name; this.age = age; this.setName = function(name) { this.name = name } } var p1 = new Person('tom', 16); var p2 = new Person('jony', 18); console.log(p1) console.log(p2)
通過構造函數方法創建對象代碼足夠簡潔,所創建的對象也有自己的類,但是當我們同時創建多個對象的時候會發現,所創建的對象都包含相同的方法,這是一種浪費記憶體的表現。
5、構造函數加原型
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.setName = function(name) { this.name = name }
我們把構造函數的方法擴展到它的原型上,這樣就不存在創建對象的時候同時創建多個方法了。
以上是我所瞭解的常用的創建對象的方式,謹以此文記錄。如有錯誤敬請指出!