1

Можно ли как-то передать arguments в класс coffeescript iife?Можем ли мы передать аргументы классу coffeescript?

CoffeeScript класс экземпляр, как это:

class App 

результатов обычно в этом:

App = (function() { 

    function App() {} 

    return App; 

})(); 

Однако, может быть, есть способ, чтобы заполнить анонимную-обертку с некоторыми аргументами, как это:

App = (function($) { 

    function App() {} 

    return App; 

})(jQuery); 

В настоящее время я обертываю каждый модуль в superf luous дополнительной обертка:

(($) -> 
    class App 
)(jQuery) 

Но я считаю, это определенно не красиво (как coffescript обычно).

+0

Дело в том, что Coffeescript передает параметр '_super' в это закрытие, когда это необходимо, поэтому я сомневаюсь, что есть способ сделать это иначе, чем то, что вы сейчас делаете. – elclanrs

+0

Также вы можете сделать это довольно: 'do (doc = document) ->' – elclanrs

+0

@elclanrs 'do (doc = document) ->' работает только в том случае, если аргумент совпадает с аргументом в iee- * caller *. Извините мою ошибку, обновил мой вопрос. – yckart

ответ

1

Я думаю, что комментарий elclanrs - это ответ, который вы ищете.

В coffeescript do ($) -> будет скомпилирован к (function($){ … })($).

Но do ($ = jQuery) -> будет компилироваться в (function($){ … })(jQuery).

На самом деле не существует более чистого способа сделать это, чем это. Это одна строка в верхней части файла и дает понять, что вы делаете.

do ($ = jQuery) -> 
    class App 
0

Вы могли бы сделать что-то вроде этого

class A extends GenericClass("some_parameter") 

где GenericClass определяется как

GenericClass = (params) -> 
    return { some: objects } 

Честно говоря, я не сделал бы, что, как он полностью делает непрозрачными, что вы пытаетесь сделать. Возможно, вы можете объяснить, что вы пытаетесь сделать с точки зрения особенностей/стоимости бизнеса и не столько с точки зрения синтаксиса CoffeeScript?

+0

Хорошее обходное решение! Тем не менее, это кажется мне не очень кофейным;) – yckart

+0

hmm, dunno! До тех пор, пока я не понимаю, что именно вы пытаетесь выполнить, трудно сказать, если она более или менее коренастая. в целом, если вы попытаетесь ввести какой-то фрагмент кода, я бы попытался использовать вызовы методов класса – robkuz

Смежные вопросы