0

这是一个数组var arr = [1, 2, 3],我想实现一个方法来观察数组的变化。它喜欢

arr.on('change', function () {
    // to do something
});

当我从数组中推送或删除数据时,它将自动触发“更改”事件。

可能吗?我该怎么做?

谢谢

4

1 回答 1

0

这是我脑海中浮现的第一个想法:

var arr = [1, 2, 3],
    tmp = [].slice.apply(arr);

setInterval(function() {
    if (arr.join() !== tmp.join()) {
        console.log("Changed");

        tmp = [].slice.apply(arr);
    }
}, 10);

或原型版本:

Array.prototype.change = function(callback) {
    var _this = this,
        tmp = [].slice.apply(_this);

    setInterval(function() {
        if (_this.join() !== tmp.join()) {
            callback();

            tmp = [].slice.apply(_this);
        }
    }, 10);
};

var arr = [1, 2, 3];
arr.change(function() {
    console.log("Changed!");
});
arr.push(4); // Changed!
于 2013-10-10T12:59:26.233 回答