关于工厂功能概念的问题

时间:2016-03-05 18:35:04

标签: javascript

我不确定这是否可行,如何给予this article我很好奇如何使用如下函数:

export default () => {
    let _foo = '';

    return {
      set foo(x) {
          if (x === undefined) {
              _foo = this.someFN();
          } else {
            _foo = x;
          }
      },

      get foo() {
          return _foo;
      },

      someFN() {
        return 'hello'
      }
    }
}

在文章中有一个概念,即工厂功能中没有“参考”。如果是这种情况,您如何将多个工厂功能链接在一起?

例如,我正在研究一个概念,我已经编写了一个工厂函数,该函数具有允许您进行链接的方法,例如:

const fooBar = FooBar();

fooBar.someMethod().someOtherMethod();

这是有效的,因为我返回this您是否要避免在工厂功能中使用“this”?和**工厂功能是否仅包含一种方法?

因此,就我上面的例子而言,将someFN()放在那里是不对的?

1 个答案:

答案 0 :(得分:1)

没有严格的规则,你不能在工厂职能中使用this。但是如果你想避免它,只需记住变量中的对象并使用它(这也避免了使用错误this调用函数的问题):

export default () => {
    let _foo = '';
    let obj = {
      set foo(x) {
          if (x === undefined) {
              _foo = this.someFN();
          } else {
            _foo = x;
          }
      },

      get foo() {
          return _foo;
      },

      someFN() {
        return 'hello'
      },

      chainableMethod1() {
          // Do something, then
          return obj;
      },

      chainableMethod2() {
          // Do something else, then
          return obj;
      }
    };

    return obj;
};

用法:

theModule.chainableMethod1().chainableMethod2();