代码之家  ›  专栏  ›  技术社区  ›  helpME1986

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

  •  0
  • helpME1986  · 技术社区  · 8 年前

    我试着用这两种方法创建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
    

    所以,我知道在构造函数的情况下,应该使用()调用方法。

    2 回复  |  直到 8 年前
        1
  •  2
  •   Jonas Wilms    8 年前

    有一个真正的构造器 你必须使用 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;
        }
     }
    
        2
  •  1
  •   Tim Klein    8 年前

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

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

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

    this.area = this.calculateArea();