浅谈js中Object.create()与new的具体实现与区别
Object.create() vs new
在 JavaScript 中,我们可以使用两种方法来创建对象:Object.create() 和 new 关键字。它们的区别如下:
- 使用 new 关键字创建的对象是一个新的实例,而使用 Object.create() 创建的对象是继承自另一个对象的实例。
- 使用 new 关键字创建的实例具有一个构造函数,而 Object.create() 创建的实例没有。
Object.create()
Object.create()
方法是ES5引入的一个方法,用于创建一个新的对象,这个对象的原型链指向传入的第一个参数。
语法如下:
Object.create(proto, [propertiesObject])
该方法接收两个参数。
参数 proto
是新对象的原型(必须参数)。传入一个对象,新建对象成为传入对象的原型链上的子代。
参数 propertiesObject
是一个可选的对象,表示为新对象定义新属性时的描述符对象。
示例1:
let person = {
name: 'Tom',
age: 18
}
let student = Object.create(person, {
gender: {
value: 'male'
}
})
console.log(student.name) // Tom
console.log(student.age) // 18
console.log(student.gender) // male
在这个示例中,我们创建了一个 person
对象,然后使用 Object.create()
创建了一个新的 student
对象,该对象的原型是 person
对象。所以 student
对象继承了 person
对象的所有属性和方法。
同时,在使用 Object.create()
时,我们还可以传入一个对象,对象中定义的新属性具有属性描述符。
示例2:
let fruit = {
color: 'red'
}
let apple = Object.create(fruit, {
name: {
value: 'apple',
writable: true,
enumerable: false,
configurable: true
}
})
console.log(apple.name) // apple
console.log(apple.color) // red
在这个示例中,我们创建了一个 fruit
对象,然后使用 Object.create()
创建了一个新的 apple
对象,该对象的原型是 fruit
对象。在传入的第二个参数中,我们定义了 name
这个新属性,同时对其进行了属性描述符的配置。
new
new
关键字用于调用构造函数来创建一个新对象。构造函数会自动返回一个新建的对象。
语法如下:
let obj = new Constructor([argument0[, argument1[, ...argumentN]]]);
示例:
function Person(name) {
this.name = name;
}
let person = new Person('Tom');
console.log(person.name); // Tom
在这个示例中,我们定义了一个 Person
构造函数,并使用 new
关键字创建了一个新对象 person
。
总结
Object.create()
方法创建的对象是继承自另一个对象的实例,而new
关键字创建的对象是一个新的实例。Object.create()
方法创建的对象没有构造函数,而new
关键字创建的对象具有构造函数。- 在使用
Object.create()
时,可以传入一个对象,该对象用来定义新属性的属性描述符。 new
调用的是构造函数,构造函数里面的 this 指向新创建的对象。
希望这篇文章能让你更好地理解 Object.create()
和 new
的区别,并能够更好地使用它们来创建对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈js中Object.create()与new的具体实现与区别 - Python技术站