1. 创建对象方式。
有以下三种:
1. const obj1 = new Object()
2. const obj2 = {}
3. const obj3 = Object.create()
2. 三种创建方式的区别。
① new Object():可以接收 number、string、boolean、object 等任意类型参数,可不传入参数,默认为 {
} 。
const numObj = new Object(3)
console.log(numObj) // Number {4}
注意:若传入另一个对象,并不是理解中的创建一个继承自传入对象的子类,而是对同一个对象值的引用,可理解成对传入对象浅拷贝,实际就是同一个变量。等价于直接将传入对象变量赋值给新建的变量。
const source = { a: '传入对象' }
const shallowCopy = new Object(source) // 等价于 shallowCopy = source
shallowCopy === source // true, 两个变量都是指向相同对象的指针地址。
② { } , 正常字面量意思,进行对象的创建,没什么可讲的。
③ Object.create( obj ) : obj 为必传参数,传参类型是对象类型。该创建对象方式,目的是创建继承自 obj 的实例对象(是个空对象 { } ),或者说将新建对象的隐式原型 _ proto _ 指向 obj,即 obj 作为新建对象的原型对象。
function People(name, age) {
this.name = name
this.age = age
}
const father = new People('爸爸', 45)
console.log(father) // People {name: '爸爸', age: 45}
const son = Object.create(father)
console.log(son) // People {}
son.__proto__ === father // true
son instanceof People // true
注:不理解上述代码中 instanceof 用法的童鞋,可以看这篇文章:https://blog.csdn.net/qq_40868156/article/details/124688170?spm=1001.2014.3001.5501