返回

对象中的构造器:class与装饰器剖析(上)

见解分享

构造函数与class语法

在class出现之前,我们使用构造函数(constructor)来定义类。构造函数是一个特殊的函数,当使用new创建对象时,会自动执行。例如:

function Person(name) {
  this.name = name;
}

// 创建一个新的对象
const person = new Person('John Doe');

// 访问对象的属性
console.log(person.name); // "John Doe"

使用class语法,我们可以更简洁地定义类:

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

// 创建一个新的对象
const person = new Person('John Doe');

// 访问对象的属性
console.log(person.name); // "John Doe"

class语法与构造函数有着相同的原理,只不过class语法使用了更简洁的语法糖,让我们可以更轻松地定义类。

装饰器

装饰器是一种在不修改类的情况下增强类功能的语法糖。装饰器可以用于添加日志记录、缓存、事务处理等功能。

例如,以下装饰器可以在方法执行前输出日志:

function log(target, name, descriptor) {
  const originalMethod = descriptor.value;

  descriptor.value = function(...args) {
    console.log(`Calling ${name} with arguments: ${args}`);
    return originalMethod.apply(this, args);
  };
}

class Person {
  @log
  greet(name) {
    console.log(`Hello ${name}!`);
  }
}

const person = new Person();
person.greet('John Doe');

输出结果:

Calling greet with arguments: [John Doe]
Hello John Doe!

装饰器可以在类声明之前或之后使用。如果装饰器用在类声明之前,它将被应用于类的所有方法。如果装饰器用在方法声明之前,它将只被应用于该方法。

总结

class和装饰器都是javascript中的重要概念。class语法使定义类更加简单,而装饰器则可以增强类的功能。理解class和装饰器的原理可以帮助我们写出更优质的代码。