DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JavaScript函數中關於valueOf和toString的理解
JavaScript函數中關於valueOf和toString的理解
編輯:關於JavaScript     

今天看到一個試題,實現如下語法的功能:

var a = add(2)(3)(4); //9 

這個就是一個高階函數的應用,分析:add(2)會返回一個函數,add(2)(3)也會返回一個函數,最後add(2)(3)(4)返回一個數值。

實現:

function add(num1){
return function(num2){
return function(num3){
return num1+num2+num3;
}
}
}
add(2)(3)(4);//9 

這個沒有錯的,可以完美解決問題。

優化:這裡只討論關於高階函數的部分,對於更好的解決方案,可以實現無限這種調用,

//方法一
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
//方法二注釋:其實就相當於,只不過對函數應用了自定義屬性,用於存儲值。
;(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,需要轉換為數字時需要調用valueOf。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved