📅  最后修改于: 2023-12-03 15:31:38.045000             🧑  作者: Mango
Object.create()
是一个用于创建一个新对象的方法,在使用它时,我们可以选择一个原型对象作为新对象的基础,同时我们也可以给新对象添加额外的属性和方法。
Object.create(proto, [propertiesObject])
一个新对象,该对象的原型链将其链接到 proto 参数中指定的原型对象。
下面我们将通过两个示例来演示 Object.create() 方法的用法,首先我们来看一个简单的示例,它演示了如何使用 Object.create() 方法来实现继承:
let animal = {
type: 'animal',
say: function() {
console.log('I am ' + this.type);
}
};
let cat = Object.create(animal);
cat.type = 'cat';
cat.say(); // I am cat
在上述示例中,我们首先定义了一个名为 animal 的对象,该对象中包含一个属性和一个方法。然后我们使用 Object.create() 方法创建了一个名为 cat 的新对象,它继承自 animal 对象。最后,我们给 cat 对象添加了一个 type 属性,并调用 say() 方法。
再来看一个稍微复杂一些的示例,它演示如何使用 Object.create() 方法来创建一个带有 getter 和 setter 方法的对象:
let person = {
firstName: 'John',
lastName: 'Doe'
};
let fullNameObj = Object.create({}, {
firstName: {
get: function() {
return this._firstName;
},
set: function(value) {
this._firstName = value.toUpperCase();
}
},
lastName: {
get: function() {
return this._lastName;
},
set: function(value) {
this._lastName = value.toLowerCase();
}
},
fullName: {
get: function() {
return this.firstName + ' ' + this.lastName;
},
set: function(value) {
var names = value.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
},
});
fullNameObj.firstName = 'Jane';
fullNameObj.lastName = 'Smith';
console.log(fullNameObj.fullName); // 'JANE smith'
在上述示例中,我们首先定义了一个名为 person 的对象。然后我们使用 Object.create() 方法创建了一个名为 fullNameObj 的新对象,同时给它添加了三个属性,这三个属性分别对应 person 对象中的两个属性和一个计算属性。每个属性都包含一个 getter 和一个 setter 方法,这些方法用于对属性进行读取和设置。
最后,我们给 fullNameObj 的 firstName 和 lastName 属性分别赋值为 'Jane' 和 'Smith',并打印出 fullName 属性的值,它是通过 firstName 和 lastName 计算得到的。需要注意的是,在fullName的setter方法中,我们将输入的值按空格分成了两个部分,分别为firstName和lastName进行赋值。
Object.create() 是一种创建对象的方式,它可以用于实现继承、创建对象并为其添加 getter 和 setter 方法等。使用 Object.create() 时,我们需要指定一个原型对象,并可以选择添加其他属性和方法。