2015-12-19 68 views
2

閱讀權威指南時, enter image description here重寫valueOf方法會導致console.log(+ [])?

所以我要檢查它是否運行像

之前我覆蓋的方法 console.log(+[]) //0

但經過

var proto = [].__proto__.__proto__ 
var valueOf = proto.valueOf 
proto.valueOf = function(){ 
debugger; 
valueOf.apply(this,arguments); 
} 
console.log(+[]) //NaN 

誰能告訴我我的錯在哪裏?

+0

你不會返回任何東西。 '+ undefined' - >'NaN' – zerkms

回答

2

您忘記了return包裝函數的結果。

proto.valueOf = function(){ 
    debugger; 
    return valueOf.apply(this,arguments); 
// ^^^^^^ 
}; 

順便說一句,你應該真的避免覆蓋Object.prototype.valueOf。只要給你用自己的方法測試的對象。

+0

哦,我很愚蠢,thx – Dophin

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

是的,不是一個好主意覆蓋的Object小號__proto__

+1

thx,只是爲了調試 – Dophin