2011-07-27 40 views
3

我有一個JavaScript函數,它接受一個參數,如:JavaScript函數參數字符串

function getSomething(cat,handler) { 

     varURI = 'text'+cat; 
     document.write('<p>'+varURI+'</p>'); 

    } 

我在輸出中看到的是:

text[object Object] 

我如何獲得真正的文本值對象的?

回答

7

你需要重寫對象的toString方法 - 和給你的對象「文本值」 - 。

你得到"[object Object]",因爲正在執行的繼承Object.prototype.toString方法,例如:

var cat = { 
    name: 'Kitten', 
    toString: function() { 
    return this.name + ' meow'; 
    } 
}; 

當你做出任何隱含的字符串轉換(這本身toString方法將被執行時,您將字符串像它),例如:

console.log(cat+' text'); // "Kitten meow text" 

注:如果通過「文本值」對象的「字符串表示」意思是說,(如上市屬性/值對),你的功能將需要enumer吃了所有的屬性(使用for-in語句),但通常大部分時間,這是爲了調試目的,如果是這樣的話,我會建議你得到一個調試器(如Firebug),並使用console.dir方法。

2

我不知道cat是什麼,但通常你使用的是toString()的方法。

function getSomething(cat,handler) { 

    varURI = 'text'+cat.toString(); 
    document.write('<p>'+varURI+'</p>'); 

} 
+2

事實上,他得到'「的翻譯:」'因爲對象不具有自己的'toString'方法(它的執行繼承一個從'對象。調用'cat.toString();'而不覆蓋它並沒有什麼區別,例如:'console.log({} +'');''和'console.log({}。toString ());'產生''[object Object]''。 – CMS

0

你可以這樣:

function ObjectToString(input,KeysOnly) { 
    var ret = []; 
    if(KeysOnly) 
     for(var k in input) 
     ret[k] = input[k]; 
    else 
     for(var k in input) 
     ret.push(k); 
    return ret.toString(); 
} 

function getSomething(cat,handler) { 

    varURI = 'text'+ObjectToString(cat); 
    document.write('<p>'+varURI+'</p>'); 
}