在 Javascript 数组上生成事件
Generating event on Javascript array
如何在 Javascript 数组的内容被修改时生成事件,即当对特定 Javascript 数组执行推送或弹出操作时应该生成事件。基本上,我想跟踪对特定 Javascript 数组执行的推送、弹出操作。
编辑:- 评论中所述的解决方案需要重写 push 或 pop 方法。我想执行它而不覆盖它。
我认为没有本地方法可以做到这一点。还讨论了该主题 here,建议的解决方案是为您的数组实施包装器 class。
另一种方法是仅实现包装器 push
函数并在函数调用时触发事件。
想法是数组是对象,因此您可以定义属性。
var someArray = []; // a normal array
someArray.push = function() { // this will override the original push method
// custom code here
console.log('pushing something..');
return Array.prototype.push.apply(this, arguments); // original push
};
// now everytime you push something a message will be logged. Change this functionality as you like.
注意:someArray.push() 现在将是可枚举的。如果你想防止这种情况,你可以使用 Object.property 方法定义 'push' 属性。
Object.defineProperty(someArray, 'push', {
enumerable: false, // it's false by default anyway
value: function() {
console.log('pushing something..');
return Array.prototype.push.apply(this, arguments);
}
});
如何在 Javascript 数组的内容被修改时生成事件,即当对特定 Javascript 数组执行推送或弹出操作时应该生成事件。基本上,我想跟踪对特定 Javascript 数组执行的推送、弹出操作。
编辑:- 评论中所述的解决方案需要重写 push 或 pop 方法。我想执行它而不覆盖它。
我认为没有本地方法可以做到这一点。还讨论了该主题 here,建议的解决方案是为您的数组实施包装器 class。
另一种方法是仅实现包装器 push
函数并在函数调用时触发事件。
想法是数组是对象,因此您可以定义属性。
var someArray = []; // a normal array
someArray.push = function() { // this will override the original push method
// custom code here
console.log('pushing something..');
return Array.prototype.push.apply(this, arguments); // original push
};
// now everytime you push something a message will be logged. Change this functionality as you like.
注意:someArray.push() 现在将是可枚举的。如果你想防止这种情况,你可以使用 Object.property 方法定义 'push' 属性。
Object.defineProperty(someArray, 'push', {
enumerable: false, // it's false by default anyway
value: function() {
console.log('pushing something..');
return Array.prototype.push.apply(this, arguments);
}
});