2015-05-29 9 views
1

Вопрос здесь относится к коду ExtendScript, но я считаю, что он должен быть агностическим для любой реализации javascript.О вводе метода вызова класса javascript, который экспортируется через экспорт

Если у нас есть что-то вроде этого в файле библиотеки JS (base64.js)

exports.encode64 = encoder('+/'); 
//... 
function encoder(extra) { 
//... 
} 

, а затем в другой файл, который использует экспортированный метод, что первый импорт/включает/требует base64.js где

var data = "some data"; 
base64.encode64(data); 

это значит, если мы не экспортировать метод и непосредственно вызывать кодировщик(), при условии, что base64.js будет «включено» в глобальное пространство имен, где выполняется код, то мы назвали бы это так?

encoder('+/' + data); 

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

Если мое предположение неверно, то каково надлежащее использование кодировщика, который бы соответствовал псевдониму base64.encode64?

Для справки/контекста полный исходный код base64.js можно найти здесь:

https://github.com/debrouwere/Extendables/blob/master/dependencies/base64.js

На соответствующую записку, есть некоторые хороший учебник, который объясняет обо всем этом изменения экспорта и требуют/импорт/включить?

+1

От взгляда на источник 'encoder' возвращает сама функция, чтобы позволить автору библиотеки разоблачить две разные версии идентичной в ином случае функции. Вы правы, что он мог реорганизовать внутренний метод (объявленный в строке 18) в экспортированный метод и принять «дополнительный» как второй параметр, хотя выбранный подход является более дружественным интерфейсом к пользователю библиотеки. Чтобы ответить на «как позвонить» Q. Если вы получили кодер напрямую (хотя он и не экспортируется на самом деле), вы бы назвали его следующим: «var myStr = (encoder ('+ /')) (data) '- я добавил для ясности ненужная пара. –

+0

Спасибо, полезное объяснение. Я забыл детали encoder(), что он возвращает функцию. – David

ответ

1

Это не имеет никакого отношения к тому, как работает экспорт. Пока что предположим, что экспорт работает так, как вы считаете, что он работает без забавного бизнеса encoder('+/'). Другими словами, экспорт просто экспортирует объекты javascript (функции, объекты, массивы и т. Д.) Простым способом, не изобретая дополнительный синтаксис. Предположим, что строка выглядит так:

function encode64 (data) { /* ... */); 
exports.encode64 = encode64; 

потому что это просто, что он делает. Честный. Здесь ничего смешного.


Теперь обсудим encoder().

Вы заметите, что автор этой библиотеки не записал определение функции encode64() в любом месте исходного кода. Вместо этого он позволяет другой функции, encoder(), написать функцию encode64() для него.

encoder() функция, вероятно, выглядит примерно так:

function encoder (extra) { 
    // do some stuff 
    return function (data) { 
     // actual implementation of the encoding function 
    } 
} 

Так encoder() не функция кодирования. Это, однако возвращает функцию кодирования (он «пишет» это для вас):

var encode64 = encoder('+/'); 
// encode64 is a function 

Так библиотека просто экспортирует (безымянным) encode64 функцию, а не encoder.


Так уточнить:

назвал бы это так? кодировщик ('+ /' + данные);

No. Он называет это следующим образом:

var encode64 = encoder('+/'); 
encode64(data); 
+0

Спасибо, я нахожу комментарий Барри Джонсона более информативным. Но ваш добавляет к этому, и ваш пример того, как его назвать, более интуитивно понятен пользователю. – David

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