1

我很难理解为什么这件事不起作用。哪里有问题?这是将值传递给该函数的正确方法,还有其他方法吗?

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()

;

4

2 回答 2

1

匿名函数是 JavaScript 中的一等公民——你通常可以像对待普通函数一样对待它们(除了它们没有给定的标识符,除非你给它们分配了一个名称)。这是关于它们的一个很好的教程——它们非常强大,我认为它们是 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();会失败,因为对象不是函数。

于 2012-06-02T07:03:01.333 回答
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
})();
于 2012-06-02T07:01:46.280 回答