很难为什么这个功能在javascript中不起作用

时间:2012-06-02 06:57:18

标签: javascript anonymous-function

我很难理解为什么这个东西不起作用。问题出在哪儿?这是将值传递给此函数的正确方法吗?还有其他方法吗?

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

2 个答案:

答案 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_prefixset_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
})();