2013-09-28 60 views
0

我想知道是否有可能改变一个函数的返回值,即改变一个函数的返回值:通过参数

var foo = function(options) { 
    var options = options || {}, 
     bar = options.bar || "bar", 
     baz = options.baz || "baz"; 

    return { 
    bar: bar, 
    baz: baz 
    } 
}; 

我想这样称呼它:

foo({ 
    bar: this.bar + "ret" 
}); 

我的期望是:

>>> { bar: "barret", baz: "baz" } 

,但我得到这个代替:

>>> { bar: "undefinedret", baz: "baz" } 

我们该怎么做?

+0

'像你期望this'不起作用。请参阅(this)[http://stackoverflow.com/questions/3127429/javascript-this-keyword]问题。 'var obj = foo(); obj.bar + =“ret”;' – zaquest

+0

你期望'this'在函数调用'bar:this.bar +“ret”'? – Sergio

回答

2

看起来像一个范围问题。 this不是指foo的范围。

这工作:

foo({ 
    bar: foo().bar + "ret" 
}); 
+0

这就是我正在寻找的东西。谢谢! – Simone

+0

不客气! –

1

外部函数体,this不可用,因此您的示例失败。你可以称之为:

foo({ 
    bar: "barret" 
}); 

或者(如果你不想使用的功能之外默认值):

var x = foo(); 
x.bar += "ret"; 

或更改功能附加一个参数:

var foo = function(options) { 
    var options = options || {}, 
     bar = options.bar || "bar", 
     baz = options.baz || "baz", 
     barSuffix = options.barSuffix || ""; 

    return { 
    bar: bar + barSuffix, 
    baz: baz 
    } 
}; 

foo({barSuffix: "ret"}); 
0

结果的创建必须发生在函数内部,而不是在传递参数时发生。
)您不能访问函数inter的NAL在创建参数传递

var foo = function(options) { 
    var options = options || {}, 
     bar = "bar" + (options.bar || ''), 
     baz = "baz" + (options.baz || ''); 

    return { 
    bar: bar, 
    baz: baz 
    } 
}; 

,并要求它像

foo({ 
    bar: "ret" 
}); 

会产生

>>> { bar: "barret", baz: "baz" }