我试图练习重写/用猴子修补方法定义,所以我这样写:
const p = Array.prototype.push;
Array.prototype.push = function() {
console.log("X");
return p.apply(this, arguments);
};
const nums = [1, 2];
nums.push(3);
console.log(nums);
我在Node 10.11.0上运行它,什么也没发生。我得到任何形式的零输出,而且没有错误。
如果我一开始就添加了一个console.log
调用,并且完全没有其他任何更改,那么它突然会按照我的预期工作。
console.log("Blah");
const p = Array.prototype.push;
Array.prototype.push = function() {
console.log("X");
return p.apply(this, arguments);
};
const nums = [1, 2];
nums.push(3);
console.log(nums);
这对我来说绝对是离奇的,我无法想象它会发生的任何原因。在Google上也找不到类似问题的证据。