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 の優れた点の 1 つだと思います。

はい、そうです:

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_makerserial_maker ではなく、返されるオブジェクトになります。もちろん、var seqer = serial_maker();オブジェクトは関数ではないため、後続は失敗します。

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