mic*_*vin 2 javascript closures
我试图重现Douglas Crockford所着的"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"
Run Code Online (Sandbox Code Playgroud)
Chrome正在接收错误:
未捕获的TypeError:对象[对象DOMWindow]的属性'serial_maker'不是函数(匿名函数)
我究竟做错了什么?
编辑:我应该说这段代码完全是从书中复制和粘贴的......
您正在尝试将函数的结果作为函数执行,并将值赋给函数.尝试:
var seqer = serial_maker;
seqer.set_prefix('Q');
seqer.set_seq(1000);
var unique = seqer.gensym();
Run Code Online (Sandbox Code Playgroud)
也看到这个jsFiddle