factory(n)
возвращает объекты с функциями. func1
определение функции создает свою собственную область видимости, а x
внутри этой функции ссылается на x = n + ''
. Но func2
- это ссылка, и область действия неверна.
Есть ли способ вернуть объект из create
, чтобы его функции были ссылками (а не отдельными определениями)?
На самом деле, я согласен с подходом func1
, в то время как площадь определения функции невелика. Если это сложная функция, было бы лучше не клонировать эту функцию в каждый объект, поступающий из factory(n)
. inner_func
нельзя использовать this
, это простая функция. Также я хочу избежать new
и this
.
var factory = (function(){
var x = '!';
return function create(n){
var x = n + '';
return {
func1: function(y){return inner_func(x, y); },
/* vs */
func2: inner_func_api
}
}
function inner_func_api(y){ return inner_func(x, y); }
function inner_func(a, b){ return a + b; }
}());
var f1 = factory(2);
var f2 = factory(3);
var f1_func1 = f1.func1(4);
var f2_func1 = f2.func1(5);
var f1_func2 = f1.func2(4);
var f2_func2 = f2.func2(5);
console.log(f1_func1, f2_func1); //24 35
console.log(f1_func2, f2_func2); //!4 !5