比较javascript中的静态函数相等?

时间:2013-04-08 02:57:02

标签: javascript function tostring equality

我正在开发一个小项目,项目的一个对象可以包括添加到作为对象属性的数组的更新函数。

实施例,

/*
    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) //

1 个答案:

答案 0 :(得分:1)

不确定。比较函数本身:

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

但是,在forEach循环播放数组时,您可能无法修改数组。