Трудности «перевода»

Aug 15, 2008 15:54

Читаю в свободное время книжку «JavaScript: The Good Parts» от гуру-дяди Douglas-а Crockford-а, причем в эээ... подлинике, хотя назвать таковым chm сборку книжки, довольно трудно, хотя и на языке оригинала. Наткнулся там на фрагмент кода:
var serial_maker = function ( ) { // Produce an object that produces unique strings. A // unique string is made up of two parts: a prefix // and a sequence number. The object comes with // methods for setting the prefix and sequence // number, and a gensym method that produces unique // strings. var prefix = ''; var seq = 0; return { set_prefix: function (p) { prefix = String(p); }, set_seq: function (s) { seq = s; }, gensym: function ( ) { var result = prefix + seq; seq += 1; return result; } }; }( ); var seqer = serial_maker( ); seqer.set_prefix = 'Q'; seqer.set_seq = 1000; var unique = seqer.gensym( ); // unique is "Q1000" Вообщем нижняя часть - это полнейшее фуфло неработающее. На выходе замыкания объект, его же пытаются выполнить, потом вообще чухня с переназначением... Естественно пришла мысль о том, что моя chm сборка книжки малость дефектная и я ломанулся в инет искать правильную версию. Нашел другой вариант:
var serial_maker = function () { // Produce an object that produces unique strings. A // unique string is made up of two parts: a prefix // and a sequence number. The object comes with // methods for setting the prefix and sequence // number, and a gensym method that produces unique // strings. var prefix = ''; var seq = 0; return { set_prefix: function (p) { prefix = String(p); }, set_seq: function (s) { seq = s; }, gensym: function ( ) { var result = prefix + seq; seq += 1; return result; } }; }; var seqer = serial_maker(); seqer.set_prefix = ('Q';) seqer.set_seq = (1000); var unique = seqer.gensym(); // unique is "Q1000" Изменения, как говорится, на лицо. Потерялось замыкание, вернее его организуют в var seqer = serial_maker(); И хоть, слава небу, это не вызывает ошибки ;), но дальше идет полнейший ппц. Глюки сканера, корявые руки редактора? Теряюсь в догадках... может еще версии поискать? Верный вариант по-моему таков:
var serial_maker = function () { // Produce an object that produces unique strings. A // unique string is made up of two parts: a prefix // and a sequence number. The object comes with // methods for setting the prefix and sequence // number, and a gensym method that produces unique // strings. var prefix = ''; var seq = 0; return { set_prefix: function (p) { prefix = String(p); }, set_seq: function (s) { seq = s; }, gensym: function ( ) { var result = prefix + seq; seq += 1; return result; } }; }(); var seqer = serial_maker; // или без начального замыкания var seqer = serial_maker(); seqer.set_prefix('Q'); seqer.set_seq(1000); var unique = seqer.gensym(); // unique is "Q1000"

js

Previous post Next post
Up