欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript函數(shù)中關于valueOf和toString的理解

 更新時間:2016年06月14日 15:27:10   作者:jian,zhou  
本文給大家介紹JavaScript函數(shù)中關于valueOf和toString的理解,簡單的說就是需要轉換為字符串時,會調用toString,需要轉換為數(shù)字時需要調用valueOf。對js 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。

相關文章

最新評論