一、通过对象字面量方式创建
var person = {
name: 'zhangsan',
age: 18
}
二、通过构造函数
缺点,内存消耗大,每个实例化的对象,方法引用新的空间地址
function Person(name, age) {
this.name = name
this.age = age
this.namePrint = function() {
console.log(this.name)
}
}
var obj = new Person(name, age)
改进方法一:将函数放到全局,解决内存损耗问题,缺点,造成全局污染
function Person(name, age) {
this.name = name
this.age = age
this.namePrint = namePrint
}
function namePrint() {
console.log(this.name)
}
var obj = new Person(name, age)
三、通过object方式创建
var person = new Object()
person.name = 'zhangsan'
person.age = 18
四、使用工厂模式创建对象
缺点:instanceof、prototype失效、浪费内存
function Person(name, age) {
var person = new Object()
person.name = name
person.age = age
person.namePrint = function() {
console.log(name)
}
return person
}
var person1 = new Person('zhangsan', 18)
var person2 = new Person('lisi', 19)
console.log(person1 instanceof Person) // false
console.log(person1.__proto__ == Person.prototype) // false
console.log(person1.namePrint === person2.namePrint) // false
五、通过原型模式创建对象
缺点:引用类型属性会被所有的实例对象共享并且修改
function Person() {}
Person.prototype.name = 'person'
Person.prototype.namePrint = function() {
console.log(this.name)
}
var person1 = new Person()
var person2 = new Person()
改进方法:原型继承组合模式
function Person(name, age) {
this.name = name
this.age = age
}
Person.prototype = {
constructor: Person,
namePrint: function() {
console.log(this.name)
}
}
var p1 = new Person('zhangsan', 18)