📅  最后修改于: 2023-12-03 15:01:38.274000             🧑  作者: Mango
在JavaScript中,Object.create()方法是一种用于创建具有指定原型对象的新对象的方法。该方法返回一个被创建对象的新实例,它的原型链指向传递给该方法的对象(即,原型对象)。
Object.create(proto, [propertiesObject])
const person = {
firstName: 'John',
lastName: 'Doe',
fullName: function() {
return this.firstName + ' ' + this.lastName;
}
}
const anotherPerson = Object.create(person);
console.log(anotherPerson.fullName()); // "John Doe"
在上面的示例中,我们创建了person
对象并将其分配给anotherPerson
对象,这是通过使用Object.create()
方法来完成的,新创建的对象的原型为person
。这意味着它可以访问person
的所有方法和属性。所以,当我们在anotherPerson
对象上调用fullName()
方法时,它会返回"John Doe"
。
Object.create()
方法还可用于创建具有指定属性的对象。为此,需要使用propertiesObject
参数。
const person = {
firstName: 'John',
lastName: 'Doe',
}
const anotherPerson = Object.create(person, {
fullName: {
get: function() {
return this.firstName + ' ' + this.lastName;
},
set: function(value) {
const parts = value.split(' ');
this.firstName = parts[0];
this.lastName = parts[1];
}
}
});
console.log(anotherPerson.fullName); // "John Doe"
anotherPerson.fullName = 'Mike Smith';
console.log(anotherPerson.firstName); // "Mike"
console.log(anotherPerson.lastName); // "Smith"
在上面的示例中,我们创建了一个名为fullName
的属性描述符对象,该对象具有get
和set
方法。在anotherPerson
对象上创建fullName
属性并使用属性描述符对象来定义其getter和setter方法。
可以结合ES6类来使用Object.create()
方法。一个例子如下:
class Person {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
fullName() {
return this.firstName + ' ' + this.lastName;
}
}
class AnotherPerson extends Person {
constructor(firstName, lastName) {
super(firstName, lastName);
}
}
const person = new Person('John', 'Doe');
const anotherPerson = Object.create(AnotherPerson.prototype);
console.log(anotherPerson instanceof AnotherPerson); // true
console.log(anotherPerson instanceof Person); // true
anotherPerson.firstName = 'Mike';
anotherPerson.lastName = 'Smith';
console.log(anotherPerson.fullName()); // "Mike Smith"
在上面的示例中,我们定义了Person
和AnotherPerson
两个类。我们创建了一个Person
的实例并将其分配给anotherPerson
对象,这是通过使用Object.create()
方法并将AnotherPerson.prototype
作为其原型对象来完成的。
这意味着anotherPerson
对象可以访问Person
类的所有方法和属性。所以,当我们在anotherPerson
对象上调用fullName()
方法时,它会返回"Mike Smith"
。