JavaScript函數(shù)中關于valueOf和toString的理解
今天看到一個試題,實現(xiàn)如下語法的功能:
var a = add(2)(3)(4); //9
這個就是一個高階函數(shù)的應用,分析:add(2)會返回一個函數(shù),add(2)(3)也會返回一個函數(shù),最后add(2)(3)(4)返回一個數(shù)值。
實現(xiàn):
function add(num1){ return function(num2){ return function(num3){ return num1+num2+num3; } } } add(2)(3)(4);//9
這個沒有錯的,可以完美解決問題。
優(yōu)化:這里只討論關于高階函數(shù)的部分,對于更好的解決方案,可以實現(xiàn)無限這種調用,
//方法一 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ù)應用了自定義屬性,用于存儲值。 ;(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);
需要轉換為字符串時,會調用toString,需要轉換為數(shù)字時需要調用valueOf。
- 全面解析JavaScript中的valueOf與toString方法(推薦)
- JavaScript中Object.prototype.toString方法的原理
- JavaScript的Number對象的toString()方法
- javascript中tostring()和valueof()的用法及兩者的區(qū)別
- JavaScript中toString()方法的使用詳解
- node.js中的buffer.toString方法使用說明
- 非常好用的JsonToString 方法 簡單實例
- Javascript中valueOf與toString區(qū)別淺析
- 淺談JS中String()與 .toString()的區(qū)別
相關文章
javascript 顯示全局變量與隱式全局變量的區(qū)別
這篇文章主要介紹了javascript 顯示全局變量與隱式全局變量的區(qū)別,需要的朋友可以參考下2017-02-02發(fā)布一個基于javascript的動畫類 Fx.js
支持大部分CSS3屬性的動畫(可能要指定詳細的屬性值)。2010-11-11js常用函數(shù)push()、pop()、shift()、unshift()、slice()和splice()等詳解
這篇文章主要給大家介紹了關于js常用函數(shù)push()、pop()、shift()、unshift()、slice()和splice()等的相關資料,js中數(shù)組操作函數(shù)還是非常多的,今天忽然想到來總結一下,也算是溫故而知新吧,需要的朋友可以參考下2023-11-11Js中FileReader讀取文件內容方法詳解(async/await)
這篇文章主要給大家介紹了關于Js中FileReader讀取文件內容(async/await)的相關資料,FileReader是前端進行文件處理的一個重要的Api,特別是在對圖片的處理上,如果你想知道圖片的處理原理,你就永遠不可能繞過它,需要的朋友可以參考下2023-11-11ES6中Proxy與Reflect實現(xiàn)重載(overload)的方法
這篇文章主要介紹了ES6中Proxy與Reflect實現(xiàn)重載(overload)的方法,分析了重載的原理及使用Proxy和Reflect來實現(xiàn)重載的操作步驟與相關技巧,需要的朋友可以參考下2017-03-03用JavaScript腳本實現(xiàn)Web頁面信息交互
這篇文章主要介紹了用JavaScript腳本實現(xiàn)Web頁面信息交互2006-10-10Egg.js構建一個stream流式接口服務實現(xiàn)詳解
這篇文章主要為大家介紹了Egg.js構建一個stream流式接口服務實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09