我有两个类,一个依赖于另一个。它是这样实现的:
class myns.ClassA
constructor(@serviceB): ->
publicFunctionA: ->
privateFunctionB.call this
privateFunctionB = ->
@serviceB.someFunction()
然后我在一个胶片中实例化它:
myns.classA = new myns.ClassA(myns.serviceB)
并用作:
myns.classA.publicFunctionA()
这里的问题是我想从 privateFunctionB 访问 serviceB。除了使用 call
之外,还有更合适的方法吗?
或许我的整个方法都被我的 Java 背景污染了太多?我需要的是相互依赖的代码模块,某种类似于单例服务的代码模块。我知道我可以使用 coffeescript 类函数并避免实例化,但是如何以干净的方式处理注入(inject) serviceB?
最佳答案
您可以将 ClassA
实例作为参数而不是 this
传递给私有(private)函数。如果您将每个类保存在它们自己的文件中,然后在没有 --bare
选项的情况下进行编译,我建议将该私有(private)函数放在类之外并将其用作普通函数(它将对文件保密,因此无需担心将内容泄露到外面):
privateFunctionB = (a) ->
a.serviceB.someFunction()
class myns.ClassA
constructor(@serviceB): ->
publicFunctionA: ->
privateFunctionB @
如果您不喜欢将函数放在文件的顶层,您也可以将它放在类中(我更喜欢将它放在那里,因为我认为它只是一个简单的函数更容易理解)。
关于javascript - 协作 coffeescript 服务/类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977565/