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" }

我们如何做到这一点?

4

3 回答 3

2

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

这有效:

foo({
  bar: foo().bar + "ret"
});
于 2013-09-28T10:28:24.960 回答
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"});
于 2013-09-28T10:19:04.273 回答
0

结果的创建必须在函数内部进行,而不是在传递参数时进行。
在创建要传递的参数时,您无权访问函数内部

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" }
于 2013-09-28T10:23:15.993 回答