Здесь я показываю, как этого добиться, не используя new
Range = function(from, to) {
function includes(x) {
return this.from <= x && x <= this.to;
}
function foreach(f) {
for (var x = Math.ceil(this.from); x <= this.to; x++) f(x);
}
function toString(){
return "(" + this.from + "..." + this.to + ")";
}
return {
from: from,
to: to,
includes: includes,
foreach: foreach,
toString: toString
};
};
var r = Range(1, 3);
console.log(r.includes(2)); // => true: 2 is in the range
r.foreach(console.log); // Prints 1 2 3
Это всего лишь пример, но я бы следовал тому, что говорит @nnnnnn - «используйте его только тогда, когда это уместно. Насколько я понимаю, код в вашем вопросе идеально подходит для использования new
и не делает нуждается в рефакторинге. "
EDIT:
Приведенный ниже код позволит избежать дублирования функций
Range = function(from, to) {
return {
from: from,
to: to,
includes: Range.includes,
foreach: Range.foreach,
toString: Range.toString
};
};
Range.includes = function(x) {
return this.from <= x && x <= this.to;
}
Range.foreach = function (f) {
for (var x = Math.ceil(this.from); x <= this.to; x++) f(x);
}
Range.toString = function() {
return "(" + this.from + "..." + this.to + ")";
}