2011-07-27 42 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>'); 
}