所以我想检查它是否像那样运作
在我覆盖方法之前
console.log(+[]) //0
但是
之后var proto = [].__proto__.__proto__
var valueOf = proto.valueOf
proto.valueOf = function(){
debugger;
valueOf.apply(this,arguments);
}
console.log(+[]) //NaN
谁能告诉我我的错在哪里?
答案 0 :(得分:2)
您忘记了return
包装函数的结果。
proto.valueOf = function(){
debugger;
return valueOf.apply(this,arguments);
// ^^^^^^
};
不过,你应该真的避免覆盖Object.prototype.valueOf
。只需使用自己的方法测试您正在测试的对象。
答案 1 :(得分:2)
添加return
声明:
var proto = [].__proto__.__proto__
var valueOf = proto.valueOf
proto.valueOf = function(){
debugger;
// You have to add a return statement here.
return valueOf.apply(this,arguments);
}
是的,覆盖__proto__
的{{1}}不是一个好主意。