var width = 10;
var height = 5;
drawBox(width,heigh);
通缉结果:
'drawBox(10,5);' <-- a string, not the returned value
虽然'drawBox(' + width + ',' + height + ');'
有效,但这太难看了,而且我有很多输入但不是两个。
是否有专门解决此问题的智能功能?
答案 0 :(得分:1)
您可以使用新属性扩充Function
的原型,如下所示:
Function.prototype.callAndGetSR = function() {
this.call(this, arguments);
return this.name + '(' + Array.prototype.slice.call(arguments).join(', ') + ')';
}
( SR 代表字符串表示)。
这样称呼:
drawBox.callAndGetSR(5,10);
此调用绘制框并返回使用参数的函数名称,即drawBox(5, 10)
。此新属性假定您不从drawBox
函数返回任何内容。
如果您需要从drawBox
函数返回一些内容并获取函数的字符串表示及其参数,您可以将其写入日志:
Function.prototype.callAndGetSR = function() {
console.log(this.name + '(' + Array.prototype.slice.call(arguments).join(', ') + ')');
this.call(this, arguments);
}
drawBox.callAndGetSR(5,10); // writes drawBox(5, 10) to log first, after that invokes the drawBox function
或者你可以简化新属性并使其返回字符串表示而不调用函数:
Function.prototype.getSR = function() {
return this.name + '(' + Array.prototype.slice.call(arguments).join(', ') + ')';
}
drawBox.getSR(5,10); // returns drawBox(5, 10)
答案 1 :(得分:0)
像这样(http://jsfiddle.net/L2JJc/1/)?
var createStrFunction = function(name, paramArray){
return name + "(" + paramArray.join(",") + ");";
}
createStrFunction("drawBox", [5,10]);
答案 2 :(得分:0)
出于好奇:
function funcToString(func, params) {
return func.name + "("
+ [].slice.call(arguments, 1).slice(0, func.length).join(",")
+ ")";
}
请按以下方式调用:
function foo(a, b) { /* ... */ };
var width = 10, height = 20;
funcToString(foo, width, height); // returns "foo(10,20)"