Ответ 1
Да, правильно. В качестве альтернативы вы можете использовать define @myApi = { foo: -> }
, потому что this
есть window
в корневом контексте файла.
Недавно я начал использовать coffeescript, и мне было любопытно, что такое "правильный" способ открыть объект, который я создаю с помощью Coffeescript, на другие страницы JavaScript. Из-за функциональности упаковки coffeescripts приемлемым является поведение вызова 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"
Да, правильно. В качестве альтернативы вы можете использовать define @myApi = { foo: -> }
, потому что this
есть window
в корневом контексте файла.
Вы также можете упростить синтаксис, например, если у вас было 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
};