1

私は小さなプロジェクトに取り組んでおり、プロジェクトのオブジェクトの 1 つに、オブジェクトのプロパティである配列に追加される更新関数を含めることができます。

例、

/*
    Add an update function to the layer
    @param function {update} The update to add
*/
Layer.prototype.addUpdate = function (update) {

    // Add the update
    this.updates.push(update);
};

/*
    Remove an update from the layer
    @param function {update} The update to remove
*/
Layer.prototype.removeUpdate = function (update) {

    this.updates.forEach(function (element, index) {

        if (element.toString() === update.toString()) {
            this.updates.splice(index, 1);
        }
    }, this);
};

上記のコードを使用すると、次のように使用できます。

var layer = new Layer();
var func = function () {
     x = 10;
};
layer.addUpdate(func);
layer.removeUpdate(func);

関数の等価性を比較するためにこのようにすることについてインターネットで読んだ後、私が読んだどこでもそうするのは本当に悪いと言っています。

関数での使用はtoString()本当に悪いですか?

更新を追加および削除するときに両方のパラメーターの関数のみを提供しながら、これを行うことができる他の方法はありますか?

UDPATE

2 つの変数が同じ参照を指しているかどうかを確認する方法はありますか? 例 (疑似);

var a = 10;
var b = a;
var c = a;

if (b and c point to a) //
4

1 に答える 1

1

もちろん。関数自体を比較します。

if(element === update) {
    // ...

ただし、 が配列をforEachループしている間に配列を変更すると、問題が発生する可能性があります。

于 2013-04-08T03:01:17.897 に答える