JS重寫函式valueOf方法實現連續呼叫求和

2021-08-06 05:39:44 字數 1913 閱讀 1344

var obj = ;

},valueof: function

() }

alert(obj);

// 呼叫了 obj.tostring

// 呼叫了 obj.valueof

// 彈出110

從上面**可看出輸出obj時,先呼叫其tostring方法,若tostring返回原始值就直接返回,否則繼續呼叫valueof方法。

var obj = ;

},valueof: function

() ;

}}alert(obj);

// 呼叫了 obj.tostring

// 呼叫了 obj.valueof

// uncaught typeerror: cannot convert object to primitive value

若tostring和valueof都返回物件則程式報錯

var obj = 

}console.log(obj + 1);

// 呼叫 valueof

// 6

var obj = ;

},tostring: function

() }

console.log(obj + 1);

// 呼叫 valueof

// 呼叫 tostring

// 11

var obj = ;

},tostring: function

() ;

}}console.log(obj + 1);

// 呼叫 valueof

// 呼叫 tostring

// uncaught typeerror: cannot convert object to primitive value

function

test

() test;

// 這裡列印函式內容,即呼叫了test.valueof()

test.valueof = function

() test;

// 輸出如下:

// 呼叫 valueof 方法

// 2

新增tostring方法並將valueof返回物件

test.valueof = function

() ;

}test.tostring= function

() test;

// 輸出如下:

// 呼叫 valueof 方法

// 呼叫 tostring 方法

// 3

若將其valueof和tostring都返回物件,程式不會報錯

test.valueof = function

() ;

}test.tostring= function

() ;

}test;

//呼叫 valueof 方法

//呼叫 tostring 方法

//ƒ #

add(1)(2)// 3

add(1, 2, 3)(10)// 16

add(1)(2)(3)(4)(5)// 15

實現:

function

add() ;

fn.tostring = function

() );

};return args1.reduce(function

(a, b) );

};-->

return fn;

}

其中,valueof和tostring,哪個先被改寫優先呼叫誰,同時出現,呼叫valueof

重寫enum的valueof方法等

intcompareto e o 比較此列舉與指定物件的順序。classgetdeclaringclass 返回與此列舉常量的列舉型別相對應的 class 物件。stringname 返回此列舉常量的名稱,在其列舉宣告中對其進行宣告。intordinal 返回列舉常量的序數 它在列舉宣告中的位置,其...

valueOf函式詳解

在型別轉換中,經常用到方法valueof 和他tostring 所有物件 包括基本包裝型別 都擁有這兩個方法。這篇文章我們先看看valueof 方法。valueof 方法會將物件轉換為基本型別,如果無法轉換為基本型別,則返回原物件。var obj new boolean true console.l...

valueOf 方法的使用

valueof 方法的使用 undefined和null沒有valueof 方法,使用會報錯 布林型別true和false會返回原值 字串型別會返回原值 數字 如果是整數,需要用小括號將數字包起來再使用valueof 方法,直接在數字後面跟.valueof 會報錯 如果是小數會返回原值 物件obje...