替换推入数组有效但从未调用过拼接

Replace push in array works but splice never called

有这样的数组:

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

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);