вызов метода объявленного через prototype из другого метода (того же объекта) 
		
		
		
		Здравствуйте! 
	
//объявление объекта
var TSwitchClient = function () {
    this.stage = '';//состояние
}
//Метод DRAW Отрисовка компонента в контейнере
TSwitchClient.prototype.draw = function () {
	console.log('TSwitchClient.prototype.draw');
}
    
//Метод Subscribe.
//Вызывается источником данных. Принимает новое состояние.
TSwitchClient.prototype.subcribe = function (stage) {
    console.log('TSwitchClient.prototype.subcriber', stage);
    this.stage = stage;
    this.draw();//отрисовка
    }
При вызове this.draw(); получаю ошибку TypeError: this.draw is not a function at Array.TSwitchClient.subcribe Естественно, объект к которому обращаюсь заранее (выше по коду) создан SwDataClient = new TSwitchClient(); Как из метода subcribe вызвать метод draw в этом случае?  | 
	
		
 Герасим, 
	что-то вы не договариваите ... 
<script>
//объявление объекта
var TSwitchClient = function () {
    this.stage = '';//состояние
}
//Метод DRAW Отрисовка компонента в контейнере
TSwitchClient.prototype.draw = function () {
  console.log('TSwitchClient.prototype.draw', this.stage);
}
//Метод Subscribe.
//Вызывается источником данных. Принимает новое состояние.
TSwitchClient.prototype.subcribe = function (stage) {
    console.log('TSwitchClient.prototype.subcriber', stage);
    this.stage = stage;
    this.draw();//отрисовка
    }
var SwDataClient = new TSwitchClient();
    SwDataClient.subcribe(1)
  </script>
 | 
	
		
 Помогите разобраться пожалуйста. Открываю то что есть. 
	файл index.html 
<script>
	var SWDataSource = null;//Источник данных
	var SwDataClient = null;//Потребитель данных
	window.onload = function() {
		console.log('Документ и все ресурсы загружены');//!! и это сообщение я получаю!
		//создаю объект Источник данных
		SWDataSource = new TSwitchDataSource();
		//создаю объект Потребитель данных
		SwDataClient = new TSwitchClient();
		SwDataClient.draw();//так и есть вызывается draw, вижу его вывод в консоли
		//прикреплю его к источнику данных
		SWDataSource.addSubscriber(SwDataClient.subcribe);//
//в которой происходит this.subcribers.push(func);
 	};
потом в Источнике данных идёт вызов
TSwitchDataSource.prototype.sendStageToSubscribers = function () {
   ....................
   this.subcribers[i](this.stage);//
Тут и теряется контекст. в итоге функция subcribe выполняется (так как она запихнута в массив вызовов) но когда в ней доходит до вызова this.draw; то так как корректного контекста this нет, и возникает ошибка. Значит надо как-то передать контекст. Как это сделать?  | 
	
		
 Цитата: 
	
  | 
	
		
 Я сделал так, кроме функции func, сохраняю ещё объект к которому она относится self.  
	
TSwitchDataSource.prototype.addSubscriber = function (self, func) {
        this.subcribers.push({self, func});
    }
...............
SWDataSource.addSubscriber(SwDataClient, SwDataClient.subcribe);//
И вызов теперь выглядит так: 
//Рассылка изменений подписчикам
    TSwitchDataSource.prototype.sendStageToSubscribers = function () {
        var i = this.subcribers.length;
        while (i !=0 ){
            i--;
              this.subcribers[i].func.call(this.subcribers[i].self, this.stage);
        }
    }
Выглядит сложно, но работает!!! спасибо. Как было бы красивее с точки зрения профи JS организовать этот код?  | 
| Часовой пояс GMT +3, время: 12:13. |