javascript创建对象的几种方式

92 阅读1分钟

一、通过对象字面量方式创建

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)