2013-09-28 98 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" }