Я пытаюсь воспроизвести некоторый код из книги Дугласа Крокфорда «Javascript: The Good Parts».Идея состоит в том, чтобы использовать замыкания для инкапсуляции объектов и избегать глобальных переменных, свойственных Javascript.
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"
Chrome обнаруживает ошибку:
Uncaught TypeError: Свойство serial_maker объекта[объект DOMWindow] не является функцией (анонимная функция)
Что я делаю не так?
РЕДАКТИРОВАТЬ: я должен сказать, что этот код полностью скопирован и вставлен из книги ...