本机JavaScript函数的回调
是否可以将回调附加到本机JS函数。例如,当调用本机JavaScript函数的回调,javascript,Javascript,是否可以将回调附加到本机JS函数。例如,当调用Array.prototype.push('d')时,我想启动另一个函数。可能吗 更新: function Dummy() {}; Dummy.prototype = Array.prototype; var arrObj = new Dummy(); var domElement = 'itemsList'; arrObj = ['werew', 'werewr', '234324']; (function(native) {
Array.prototype.push('d')
时,我想启动另一个函数。可能吗
更新:
function Dummy() {};
Dummy.prototype = Array.prototype;
var arrObj = new Dummy();
var domElement = 'itemsList';
arrObj = ['werew', 'werewr', '234324'];
(function(native) {
arrObj.push = function() {
native.apply(this, arguments);
arrObj.render(domElement);
};
})(arrObj.push);
arrObj.addItem = function(item) {
this.push(item); //Uncaught TypeError: this.push is not a function
this.render(domElement);
return this;
}
您可以使用自己的功能劫持它:
(函数(本机){
Array.prototype.push=函数(){
native.apply(this,arguments);//重定向对本机函数的调用
//在这里做点什么
};
})(Array.prototype.push);
通常情况下,除非你有很好的理由,否则不应该修改本机函数。看起来你有一些困惑。首先将arrObj
声明为从array.prototype
继承的非数组对象,然后用实际数组覆盖它。所以前者是无用的。我将其分配为数组原型,这样我就可以用实际影响数组的方式覆盖数组方法。我认为您需要这样的内容:@JS-JMS-WEB您没有遵循这个答案中的代码,JavaScript是区分大小写的。