创建对象的方式

108 阅读1分钟

1.对象字面量创建

let person1 = {
    name: '张三',
    age: 20,
    getName: function () {
        return this.name
    },
}

2.通过 Object()来创建对象

let person = new Object()
person.name = '张三'
person.age = 20
person.getName = function () {
    return this.name
}

console.log(person)

3.基于工厂方法

​ 优点:解决多个相似对象而导致的代码重复问题 ​ 缺点:无法识别对象属于哪个类型

function createPerson(name, age) {
    let person = new Object()
    person.name = name
    person.age = age
    person.getName = function () {
        return this.name
    }
    return person
}

let p1 = createPerson('张三', 20)
let p2 = createPerson('李四', 18)
console.log(p1);
console.log(p2)

4.通过构造函数创建对象

​ 优点:解决了工厂模式无法识别对象类型 ​ 缺点:构造函数中的方法都要在实例上再次创建一遍

function Person(name, age) {
    this.name = name
    this.age = age
    this.getName = function () {
        return this.name
    }
}

let p1 = new Person('张三', 20)
let p2 = new Person('李四', 18)
// console.log(p1, p2)
console.log(p1.constructor === p2.constructor)//true
console.log(p1 instanceof Object)//true
console.log(p2 instanceof Object)//true
console.log(p1.getName() === p2.getName())  //false

5.通过Prototype(原型)创建对象

​ 优点:解决了上面构造函数中的方法都要在实例上重新创建的问题 ​ 缺点:在原型上定义的属性,被所有实例共享,所有的实例在该属性中都是相同的值

function Person() {
}

Person.prototype.name = '张三'
Person.prototype.age = 20
Person.prototype.getName = function () {
    console.log(this.name);
}
let p1 = new Person()
let p2 = new Person()
p1.name// '张三'
p1.getName()//'张三'
p2.name// '张三'
p2.getName()//'张三'
console.log(p1.getName() === p2.getName()) //true