Javascript 关于创建getter的构造函数函数与工厂函数

Javascript 关于创建getter的构造函数函数与工厂函数,javascript,Javascript,我尝试使用这两种方法创建getter -工厂功能 function CreateCircle(radius) { return { radius, get area() { return this.radius * 20; } } } -和构造函数 function ConstructorFunctionCircle(radius) { this.radius = radius; this.area = () =&g

我尝试使用这两种方法创建getter -工厂功能

function CreateCircle(radius) {
  return {
    radius,
    get area() {
        return this.radius * 20;
    }
   }
}
-和构造函数

  function ConstructorFunctionCircle(radius) {
      this.radius = radius;
      this.area = () => this.radius * 20;
  }
然后我创建了对象,并将该区域记录在控制台中:

  const constructorFunctionCircle = new ConstructorFunctionCircle(20);
  const factoryFunctionCircle = CreateCircle(20);

  console.log(`factoryFunctionCircle ${factoryFunctionCircle.area}`);
  console.log(`constructorFunctionCircle ${constructorFunctionCircle.area}`);
结果是:

   factoryFunctionCircle  400
   constructorFunctionCircle () => this.radius * 20
因此,我理解,对于构造函数,我应该使用()调用一个方法

那么,如何使用构造函数创建getter属性呢

对于实构造函数,必须使用
defineProperty

  function ConstructorFunctionCircle(radius) {
    this.radius = radius;
    Object.defineProperty(this, "area", {
      get: function() {
        return radius * 20;
      }
    });
 }
但是,我更喜欢上课:

  class Circle {
    constructor(radius) {
       this.radius = radius;
    }
    get area() {
      return 2 * Math.PI * this.radius ** 2;
    }
 }
对于实构造函数,您必须使用
defineProperty

  function ConstructorFunctionCircle(radius) {
    this.radius = radius;
    Object.defineProperty(this, "area", {
      get: function() {
        return radius * 20;
      }
    });
 }
但是,我更喜欢上课:

  class Circle {
    constructor(radius) {
       this.radius = radius;
    }
    get area() {
      return 2 * Math.PI * this.radius ** 2;
    }
 }

您可以这样定义另一个函数(本例中为lambda):

然后让您的原始属性调用该函数:

this.area = this.calculateArea();

但是类肯定是更好的选择。

您可以定义另一个函数(本例中为lambda),如下所示:

然后让您的原始属性调用该函数:

this.area = this.calculateArea();
但是一个类肯定是更好的选择