Подмена контекста - насколько это правильно?
function Test(){
//...
}
Test.prototype = {
data: undefined,
working: null, // массив с инстенсами
collectData: function(){
this.data = 'data'; // здесь я собираю данные
},
run: function(){ // здесь прохожу по массиву инстенсов
var length = this.working.length,
item = undefined;
for(var i = 0; i < length; i++){
item = this.working[i];
item.one.call(this); // и передаю им this в качестве контекста
}
}
}
/**
* И все это сделано для того,
* чтобы в объектах ниже я мог обращаться
* к свойству data инстенса var test = new Test();
* как к своему...
*
* Делают так в js? Под "так" я подразумеваю
* вызов методов из массива в инстенсе test
* с передачей в эти методы себя в качестве
* контекста?
* И если так в js делают, то как это с точки
* зрения ООП?
*/
var Obj1 = {
one: function(){
console.log('obj1', this.data);
},
two: function(){
//...
}
}
var Obj2 = {
one: function(){
console.log('obj2', this.data);
},
two: function(){
//...
}
}
var test = new Test();
test.working([new obj1(), new obj2()]);
test.collectData();
test.run();
У меня есть объект Test, который предназначен для обработки данных, которые получает по ссылке. Он получает не форматированную строку, которую нужно очень сильно отфарматировать и для этого у меня существуют ещё объекты, в моем случаи obj1 и obj2, каждый из которых проводит нужные действия с данными.
И вопрос - можно ли так делать в js и не выходит ли такой подход за рамки ООП?
Источник: Stack Overflow на русском