【问题标题】:Expose a javascript api with coffeescript使用 coffeescript 公开一个 javascript api
【发布时间】:2011-08-25 03:05:09
【问题描述】:

我最近开始使用coffeescript,并且很好奇将我用Coffeescript 创建的对象公开给其他javascript 页面的“正确”方式是什么。由于咖啡脚本包装功能,调用window.coffeeObject = externalObject 是否可以接受。

示例

example.coffee

externalObject = 
   method1: -> 'Return value'
   method2: -> 'Return method2'

window.myApi = externalObject

example.js -- 编译自example.coffee

(function() {
  var externalObject;
  externalObject = {
    method1: function() {
      return 'Return value';
    },
    method2: function() {
      return 'Return method2';
    }
  };
  window.myApi = externalObject;
}).call(this);

other.js

alert(myApi.method1()) // Should return "Return value"

【问题讨论】:

  • 它应该可以工作...它会引发一些错误吗?你确定在 example.js 之后加载 other.js 吗?
  • 我确定它有效,我认为他只是在这里寻求最佳实践。

标签: javascript coffeescript


【解决方案1】:

您可以进一步简化语法,例如,如果您有 2 个内部函数

example.coffee

myPrivateFunction = ->
    "return 1"

myPrivateFunction2 = ->
    "return 2"

@myApi = {
    myFunction : myPrivateFunction,
    myFunction2 : myPrivateFunction2
}

example.js

this.myApi = {
  myFunction: myPrivateFunction,
  myFunction2: myPrivateFunction2
};

@ 将是文件主范围内的window

然后通过window.myApi.myFunction()从其他地方拨打电话

如果要将外部函数名称映射到相同的内部名称,如果不指定key : value对,则默认使用字符串值作为键。

example.coffee

@myApi = {
    myPrivateFunction,
    myPrivateFunction2
}

example.js

this.myApi = {
  myPrivateFunction: myPrivateFunction,
  myPrivateFunction2: myPrivateFunction2
};

【讨论】:

    【解决方案2】:

    是的,这是正确的。或者,您可以使用定义@myApi = { foo: -> },因为this 在文件的根上下文中是window

    【讨论】:

    • window.foo 还具有将其注入全局范围非常显式的优点。
    • 我猜使用 @ 符号会更好,因为它对于你的 node.js 脚本也是可移植的,对吗?
    • 完全正确。 windowthis 都可以正常工作;风格上,我认为window。是首选。如果您发现自己正在为全球出口苦苦挣扎,您会感谢自己...(编辑以使用 brent 回复 simul-post:是的,this 将自动解析为 Node 中的 exports。注意我喜欢定义 root = exports ? this 之类的东西来消除任何可能的混淆。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2013-10-30
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多