2013-09-28 2 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' не работает, как вы ожидаете. Пожалуйста, обратитесь к этому вопросу [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 NALS при создании параметров для передачи)

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" } 
Смежные вопросы