如何在coffeesricpt中将函数从模块导出到另一个模块?

时间:2015-06-09 08:02:04

标签: coffeescript amd

为了代码重用的目的,我想在一个函数中捕获一些逻辑,并在其他模块中调用它

这是功能定义

// Module A
define (require) ->

  doSomething(a, b, c) ->
    "#{a}?#{b}&#{c}"

以下是如何使用功能doSomething

// Module B

define(require) ->

   a = require 'A'

...

   class Bee
     constructor: ->
       @val = a.doSomething(1, 2, 3)

但是在浏览器中,我收到了此错误消息

Uncaught ReferenceError: doSomething is not defined

在coffeescript中导出/导入自由函数的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

此:

define (require) ->

  doSomething(a, b, c) ->
    "#{a}?#{b}&#{c}"

不是函数定义。这就是伪装:

define (require) ->
  return doSomething(a, b, c)( -> "#{a}?#{b}&#{c}")

所以你的模块试图调用doSomething函数,然后调用它返回的内容作为另一个函数,它将第三个函数作为参数。然后,从模块发回任何doSomething(...)(...)返回。

所以当你这样说时:

a = require 'A'

你在a中得到“谁知道什么”而且该内容没有doSomething属性,因此a.doSomething(1,2,3)会为你提供ReferenceError

我想你想把你的函数包装在模块中的一个对象中:

define (require) ->
  doSomething: (a, b, c) ->
    "#{a}?#{b}&#{c}"

或者,您可以返回功能:

define (require) ->
  (a, b, c) ->
    "#{a}?#{b}&#{c}"

然后像这样使用它:

doSomething = require 'A'
doSomething(1, 2, 3)