JavaScript函數(shù)中關(guān)于valueOf和toString的理解
今天看到一個試題,實(shí)現(xiàn)如下語法的功能:
var a = add(2)(3)(4); //9
這個就是一個高階函數(shù)的應(yīng)用,分析:add(2)會返回一個函數(shù),add(2)(3)也會返回一個函數(shù),最后add(2)(3)(4)返回一個數(shù)值。
實(shí)現(xiàn):
function add(num1){
return function(num2){
return function(num3){
return num1+num2+num3;
}
}
}
add(2)(3)(4);//9
這個沒有錯的,可以完美解決問題。
優(yōu)化:這里只討論關(guān)于高階函數(shù)的部分,對于更好的解決方案,可以實(shí)現(xiàn)無限這種調(diào)用,
//方法一
function add(a) {
var temp = function(b) {
return add(a + b);
}
temp.valueOf = temp.toString = function() {
return a;
};
return temp;
}
add(2)(3)(4)(5);//14
//方法二、另看到一種很飄逸的寫法(來自Gaubee):
function add(num){
num += ~~add;
add.num = num;
return add;
}
add.valueOf = add.toString = function(){return add.num};
var a= add(3)(4)(5)(6); // 18
//方法二注釋:其實(shí)就相當(dāng)于,只不過對函數(shù)應(yīng)用了自定義屬性,用于存儲值。
;(function(){
var sum=0;
function add(num){
sum+=num;
return add;
}
add.valueOf=add.toString=function(){return sum;}
window.add=add;
})()
var a= add(3)(4)(5)(6); // 18[/code]
這是我在[url=http://www.cnblogs.com/wengxuesong/p/5577683.html]博客園[/url]看到的文章中寫的,對于其中的方法一和方法二 一直不理解,也嘗試在控制臺輸出 [code=javascript,javascript 代碼,true]function 9
var temp = function() {
}
temp.valueOf = function() {
return 2;
}
temp.toString = function() {
return 'hahh';
}
alert(temp);
console.log(2 * temp);
需要轉(zhuǎn)換為字符串時,會調(diào)用toString,需要轉(zhuǎn)換為數(shù)字時需要調(diào)用valueOf。
- 全面解析JavaScript中的valueOf與toString方法(推薦)
- JavaScript中Object.prototype.toString方法的原理
- JavaScript的Number對象的toString()方法
- javascript中tostring()和valueof()的用法及兩者的區(qū)別
- JavaScript中toString()方法的使用詳解
- node.js中的buffer.toString方法使用說明
- 非常好用的JsonToString 方法 簡單實(shí)例
- Javascript中valueOf與toString區(qū)別淺析
- 淺談JS中String()與 .toString()的區(qū)別
相關(guān)文章
JavaScript Html實(shí)現(xiàn)移動端紅包雨功能頁面
這篇文章主要為大家詳細(xì)介紹了JavaScript Html實(shí)現(xiàn)移動端紅包雨功能頁面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-01-01
JavaScript創(chuàng)建一個object對象并操作對象屬性的用法
這篇文章主要介紹了JavaScript創(chuàng)建一個object對象并操作對象屬性的用法,實(shí)例分析了javascript使用object類定義對象及屬性的用法,需要的朋友可以參考下2015-03-03
JavaScript Ajax實(shí)現(xiàn)異步通信
這篇文章主要為大家詳細(xì)介紹了JavaScript Ajax實(shí)現(xiàn)異步通信的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
老生常談JavaScript面向?qū)ο蠡A(chǔ)與this指向問題
下面小編就為大家?guī)硪黄仙U凧avaScript面向?qū)ο蠡A(chǔ)與this指向問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
微信小程序開發(fā)之大轉(zhuǎn)盤 仿天貓超市抽獎實(shí)例
本篇文章主要介紹了微信小程序開發(fā)之大轉(zhuǎn)盤 仿天貓超市抽獎實(shí)例,這里整理了詳細(xì)的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12

