我很难理解为什么这个东西不起作用。问题出在哪儿?这是将值传递给此函数的正确方法吗?还有其他方法吗?
seqer.set_prefix ='Q';
seqer.set_seq = 1000;
是否可以这样做:
sequer.set_prefix('Q');
var serial_maker = function () {
var prefix = '';
var seq = 0;
return {
set_prefix: function (p) {
prefix = 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'; // is this the right way to pass in values to this function, are there other ways? is it possible to write like this sequer.set_prefix('Q);
seqer.set_seq = 1000; // same here?
seqer.gensym()
答案 0 :(得分:1)
匿名函数是JavaScript中的一等公民 - 你通常可以像处理普通函数一样对待它们(除非你没有给定的标识符,除非你将它们分配给一个名字)。 Here's a good tutorial about them - 它们非常强大,我认为它们是关于JavaScript的最好的东西之一。
是的,做:
seqer.set_prefix = 'Q';
seqer.set_seq = 1000;
不正确。你用这些常量覆盖了这些函数。你的猜测是正确的 - 要打电话给他们,你会使用:
seqer.set_prefix('Q');
seqer.set_seq(1000);
顺便说一句,你的函数还有另一个错误:
var serial_maker = function () {
...
return {
...
};
}(); // <- right here
您正在定义一个匿名函数,但立即调用它。不幸的是,var serial_maker
将不是一个serial_maker - 它将是返回的对象。当然,后续的var seqer = serial_maker();
将失败,因为该对象不是函数。
答案 1 :(得分:0)
set_prefix
和set_seq
是方法。要使用它们,请这样做:
var seqer = serial_maker();
seqer.set_prefix('Q');
seqer.set_seq(1000);
seqer.gensym();
另外,要创建serial_maker()
“模块”,您需要创建它们。
var serial_maker = (function () {
//code here
}());
//or
var serial_maker = (function () {
//code here
})();