关于创建吸气剂的构造函数与工厂函数

时间:2018-08-20 14:36:18

标签: javascript

我试图使用两种方法创建吸气剂 -工厂功能

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属性?

2 个答案:

答案 0 :(得分: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;
    }
 }

答案 1 :(得分:1)

您可以这样定义另一个函数(在这种情况下为lambda):

this.calculateArea = () => this.radius * 20;

然后拥有您的原始属性,只需调用该函数即可:

this.area = this.calculateArea();

但是绝对可以选择上课。