📜  JavaScript Object create()方法(1)

📅  最后修改于: 2023-12-03 15:01:38.274000             🧑  作者: Mango

JavaScript Object create()方法

在JavaScript中,Object.create()方法是一种用于创建具有指定原型对象的新对象的方法。该方法返回一个被创建对象的新实例,它的原型链指向传递给该方法的对象(即,原型对象)。

语法

Object.create(proto, [propertiesObject])

  • 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的属性描述符对象,该对象具有getset方法。在anotherPerson对象上创建fullName属性并使用属性描述符对象来定义其getter和setter方法。

使用ES6类

可以结合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"

在上面的示例中,我们定义了PersonAnotherPerson两个类。我们创建了一个Person的实例并将其分配给anotherPerson对象,这是通过使用Object.create()方法并将AnotherPerson.prototype作为其原型对象来完成的。

这意味着anotherPerson对象可以访问Person类的所有方法和属性。所以,当我们在anotherPerson对象上调用fullName()方法时,它会返回"Mike Smith"