2016-03-05 3 views
0

Я не уверен, если это вообще возможно, как когда-либо давали 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. Вы должны избегать «этого» в заводских функциях? и ** Есть ли заводские функции, предназначенные только для одного метода?

Так что, в случае моего примера выше, было бы неправильно иметь someFN()?

+0

Это был не рабочий код, который имеет с ним проблему, тем не менее он был исправлен. Можете ли вы ответить на вопрос так, как я могу проголосовать или принять. Благодарю. – TheWebs

ответ

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(); 
Смежные вопросы