Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обращение к свойствам родителя (ООП) (https://javascript.ru/forum/misc/59874-obrashhenie-k-svojjstvam-roditelya-oop.html)

NapalmRain 01.12.2015 15:14

Обращение к свойствам родителя (ООП)
 
Доброго дня всем!

Есть некий объект
var Model = function(modelName) {
	var url = '/data/'+modelName+'.json'; 
	this.Data = null;
	
	$.ajax({
        type: 'POST',
        dataType: 'json',
        url: url,
		async: true,
		success: function(response) {
			Model.Data = response; // Вот тут беда
        },
		fail: function() {
			alert('Error');
		}
	});
}

var table = new Model('table');


В указанном месте есть необходимость отдать данные в переменную
this.Data

Но использовать this не могу, а как иначе, не представляю. Пробовал через superclass, но не вышло.
Я очень плох в ООП на JavaScript, надеюсь на подсказку!

Заранее всем спасибо!

ruslan_mart 01.12.2015 15:27

var Model = function(modelName) {
	var url = '/data/'+modelName+'.json',
		self = this;
	this.Data = null;
	
	$.ajax({
        type: 'POST',
        dataType: 'json',
        url: url,
		async: true,
		success: function(response) {
			self.Data = response; // Вот тут беда
        },
		fail: function() {
			alert('Error');
		}
	});
}

var table = new Model('table');

NapalmRain 01.12.2015 15:36

Ruslan_xDD, премного благодарен!
Как обычно, всё оказалось как нельзя проще...

ruslan_mart 01.12.2015 16:49

NapalmRain, колбэки лучше вынести в методы:

var Model = function(modelName) {
	var url = '/data/' + modelName + '.json';

	$.ajax({
		type: 'POST',
		dataType: 'json',
		url: url,
		async: true,
		success: this.onSuccess.bind(this),
		fail: this.onError.bind(this)
	});
};
Model.prototype = {
	Data: null,
	onSuccess: function(response) {
		this.Data = response;
	},
	onError: function() {
		alert('Error');
	}
};

var table = new Model('table');

Тогда и self не нужен будет. :)

Яростный Меч 01.12.2015 19:24

в $.ajax можно указать context:this, тогда и .bind(this) не понадобится

ruslan_mart 01.12.2015 19:38

Яростный Меч, может и можно, я в jQuery не эксперт.


Часовой пояс GMT +3, время: 07:42.