js中创建对象的几种方式及Object.create()与new Object()的区别

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


版权声明:本文为qq_40868156原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。