如果我在通过在其构造函数原型上调用Object.defineProperty
创建的对象上有一个属性,该对象返回一个数组,如:
function Foo() {
this._bar = [];
}
Object.defineProperty(Foo.prototype, 'bar', {
get: function () {
return this._bar;
}
});
如何在派生的.push()
属性上捕获和覆盖对bar
的调用?
答案 0 :(得分:4)
以下是有关如何覆盖您的财产push
的完整实用示例。
function Foo() {
this._bar = [];
var oldPush = this._bar.push;
this._bar.push = function(){
for(var i = 0; i < arguments.length; i++){
//do something with each element if needed
$('body').append("<p>INSERTING VALUE: " + arguments[i] + "</p>");
}
oldPush.apply(this, arguments);
};
}
Object.defineProperty(Foo.prototype, 'bar', {
get: function () {
return this._bar;
}
});
请查看此演示文稿:JSFiddle
更新:编辑代码,以便能够使用参数列表调用push,例如: foo.bar.push(1, 2, 3)
。