Expose a javascript api with coffeescript

好久不见. 提交于 2019-12-18 12:58:10

问题


I recently started using coffeescript and was curious what is the "right" way to expose an object that I create with Coffeescript to other javascript pages. Because of coffeescripts wrapping functionality, is it acceptable behavior to call window.coffeeObject = externalObject.

Example

example.coffee

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

window.myApi = externalObject

example.js -- compiled from 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"

回答1:


Yep that's correct. Alternatively you can use define @myApi = { foo: -> } because this is window in the root context of the file.




回答2:


You can simplify the syntax further, for example if you had 2 internal functions

example.coffee

myPrivateFunction = ->
    "return 1"

myPrivateFunction2 = ->
    "return 2"

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

example.js

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

The @ will be window within the main scope of the file.

Then call from elsewhere by window.myApi.myFunction()

If you wanted to map the external function names to the same internal names, if you don't specify key : value pairs, it will just use the string value as the key by default.

example.coffee

@myApi = {
    myPrivateFunction,
    myPrivateFunction2
}

example.js

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


来源:https://stackoverflow.com/questions/5995510/expose-a-javascript-api-with-coffeescript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!