Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.05.2014, 14:56
Интересующийся
Отправить личное сообщение для MishaUA Посмотреть профиль Найти все сообщения от MishaUA
 
Регистрация: 03.05.2014
Сообщений: 26

Помогите новичку с колбэками
Всем привет!
Несколько лет программирую на С/С++. Сейчас пишу программу на Qt с использованием QtScript, чтобы программу можно было расширять с помощью ECMAScript (почти тот же JavaScript).
Проблемы у меня возникли на стадии изучения ООП на JavaScript. Допустим, есть код:
var ob = {
	function func(callb) {
		callb();
	}
}

function MainObject() {
	var	testVar = false;
	
	ob.func(function(){
		this.testVar = true;
	});
}

var mobject = new MainObject();

Нужно, чтобы в конструкторе MainObject вызвалась функция func объекта ob и выполнила переданную функцию, сама функция должна установить переменную testVar функции MainObject.
Если бы не было последней строки, можно было бы callb() заменить на callb.call(MainObject) (наверно). Но как задать объект this в данном случае?
Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 03.05.2014, 15:17
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от MishaUA
Но как задать объект this в данном случае?
Контекст надо задавать при вызове функции. А вызов у тебя происходит на третьей строчке. Вот там и должен устанавливаться контекст. Например так:

var ob = {
    function func(callb, context) {
        callb.call(context);
    }
}
 
function MainObject() {
    var testVar = false;
     
    ob.func(function(){
        this.testVar = true;
    }, this);
}


Хотя есть ES5 функция bind(), с помощью которой можно привязать контекст к самой функции:

ob.func(function(){
        this.testVar = true;
    }.bind(this));


Ну и самый простой вариант, не требующий указания контекста:
var mainObject = this;
    ob.func(function(){
        mainObject.testVar = true;
    });
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 03.05.2014, 15:19
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Что-то сразу не заметил. Ты видимо хотел написать так?
function MainObject() {
    this.testVar = false;
     
    ...
}
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 03.05.2014, 18:02
Интересующийся
Отправить личное сообщение для MishaUA Посмотреть профиль Найти все сообщения от MishaUA
 
Регистрация: 03.05.2014
Сообщений: 26

Огромное спасибо!!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синтаксис. Помогите новичку andr2510 jQuery 4 28.04.2014 12:57
помогите новичку с обратной связью от сервера bigjoy AJAX и COMET 2 14.10.2013 08:55
Помогите плис новичку в ajax urel AJAX и COMET 6 12.01.2013 21:36
Помогите новичку! Анатолий Саратовцев Events/DOM/Window 7 04.08.2012 17:46
Помогите новичку с выпадающим списком interest Элементы интерфейса 5 19.05.2010 13:15