返回

ES6入门之对象的扩展

前端

## ES6 对象的扩展

ES6 对 JavaScript 对象进行了扩展,使之更加灵活和强大。这些扩展包括:

  • 属性的简洁表示法 :使用简短的语法来定义对象的属性。
  • 属性名表达式 :允许在定义对象属性时使用表达式。
  • 方法的 name 属性 :允许在方法定义中指定方法的名称。
  • 属性的可枚举性和遍历 :允许控制对象的属性是否可枚举以及如何遍历对象。
  • **super ** :允许子类访问父类的属性和方法。

## 属性的简洁表示法

在 ES6 中,可以使用简短的语法来定义对象的属性。例如,以下代码定义了一个名为 name 的属性,其值为 "John Doe"

const person = {
  name: "John Doe",
};

这种简洁的表示法可以用于定义任何类型的属性,包括数据属性、访问器属性和生成器方法。

## 属性名表达式

在 ES6 中,可以在定义对象属性时使用表达式。例如,以下代码定义了一个名为 fullName 的属性,其值为 firstNamelastName 的连接:

const person = {
  firstName: "John",
  lastName: "Doe",
  fullName: `${firstName} ${lastName}`,
};

属性名表达式可以用于定义任何类型的属性,包括数据属性、访问器属性和生成器方法。

## 方法的 name 属性

在 ES6 中,可以在方法定义中指定方法的名称。例如,以下代码定义了一个名为 greet 的方法,其名称为 "sayHello"

const person = {
  greet: function sayHello() {
    console.log("Hello, world!");
  },
};

方法的 name 属性可以用于在对象上查找方法或在对象上遍历方法。

## 属性的可枚举性和遍历

在 ES6 中,可以使用 Object.defineProperty() 方法来控制对象的属性是否可枚举以及如何遍历对象。例如,以下代码定义了一个名为 name 的属性,使其不可枚举:

const person = {
  name: "John Doe",
};

Object.defineProperty(person, "name", {
  enumerable: false,
});

现在,当使用 for...in 循环遍历对象时,name 属性将不会被遍历。

## super 关键字

在 ES6 中,可以使用 super 关键字来访问父类的属性和方法。例如,以下代码定义了一个名为 Child 的类,它继承自 Parent 类:

class Parent {
  constructor(name) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

class Child extends Parent {
  constructor(name, age) {
    super(name);
    this.age = age;
  }

  greet() {
    super.greet();
    console.log(`I am ${this.age} years old.`);
  }
}

const child = new Child("John Doe", 20);
child.greet();

输出:

Hello, my name is John Doe.
I am 20 years old.

super 关键字可以用于访问父类的任何属性或方法,包括私有属性和方法。

## 结语

ES6 中的对象扩展使 JavaScript 对象更加灵活和强大。这些扩展可以用于创建更简洁、更易于维护的代码。