替换push in array工作但是splice从未调用过

时间:2017-02-05 12:08:07

标签: javascript arrays google-chrome splice

拥有这样的数组:

var k =[1,2];
k.push(3);

像这样重新定义推送:

function kPush(e){
  this[this.length] = e * 2;
}
Object.defineProperty(k, 'push', {
  get: function(){return kPush;}
});

使用

进行呼叫
k.push(4);
document.write(k);

给出:



var k =[1,2];
k.push(3);
function kPush(e){
  this[this.length] = e * 2;
}
Object.defineProperty(k, 'push', {
  get: function(){return kPush;}
});
k.push(4);
document.write(k);




给予:

1,2,3,8

万事如意。现在我需要覆盖splice,但它从未调用过。

Object.defineProperty(k, 'splice', {
  get: function(){return kSplice;}
});

但是

console.debug(k.splice);

给了我function splice() { [native code] }。 < - 它的原生?但我已经覆盖了财产!

如何覆盖splice

1 个答案:

答案 0 :(得分:1)

var k =[1,2];
k.push(3);
function kPush(e){
  this[this.length] = e;
}
Object.defineProperty(k, 'push', {
  get: function(){return kPush;}
});
Object.defineProperty(k, 'splice', {
  get: function(){return function(){
    console.log("Splice");
   Array.prototype.splice.apply(this,arguments);
    }}
});
k.push(4);
k.splice(1,1);
document.write(k);