Gaito, подобный подход, с предварительными объявлениями, оправдывает себя лишь в одном случае, при построении цепочек наследования с использованием оператора with.
Operations={
data: "",
sum: "",
mul: "",
combine: function(){with(this) return sum()+mul()}
}
with(OperationsWithArray=Object.create(Operations)){
sum=function(){return this.data.reduce(function(x, y) {return x + y})}
mul=function(){return this.data.reduce(function(x, y) {return x * y})}
}
with(OperationsWithNumber=Object.create(Operations)){
sum=function(){return this.data+this.data}
mul=function(){return this.data*this.data}
}
with(Object.create(OperationsWithArray)){
data=[1,2,3]
console.log(combine())
}
with(Object.create(OperationsWithNumber)){
data=3
console.log(combine())
}