覆盖valueOf方法导致console.log(+ [])上的差异?

时间:2015-12-19 08:32:51

标签: javascript

阅读权威指南时, enter image description here

所以我想检查它是否像那样运作

在我覆盖方法之前

console.log(+[]) //0

但是

之后
var proto = [].__proto__.__proto__
var valueOf = proto.valueOf
proto.valueOf = function(){
debugger;
valueOf.apply(this,arguments);
}
console.log(+[])  //NaN
谁能告诉我我的错在哪里?

2 个答案:

答案 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}}不是一个好主意。