javascript - 协作 coffeescript 服务/类(class)

标签 javascript oop dependency-injection coffeescript

我有两个类,一个依赖于另一个。它是这样实现的:

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/

相关文章:

javascript - 如何使用 AngularJS 确定元素的类型?

javascript - 尝试通过 jQuery getJSON jsonp 读取远程 URL,但它不起作用

javascript - 正则表达式匹配以问号结尾的短语

angular - ng build 有效,但不适用于 --prod

c# - FreshMvvm 中的控制反转 (IOC)

javascript - Bootstrap 无限轮播(循环)多元素

c++ - 共享常见对象 - 警告 "defined but not used"

javascript - 为什么我的 JavaScript 对象属性会被其他实例覆盖?

javascript - 如何区分方法和函数?

c# - 多层应用程序中的依赖注入(inject)