Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   proxy() и изменение переданного в контекст объекта (https://javascript.ru/forum/jquery/37953-proxy-i-izmenenie-peredannogo-v-kontekst-obekta.html)

lamo4ok 15.05.2013 11:48

proxy() и изменение переданного в контекст объекта
 
function GetRusMaterial(d) {
	var d1 = {id:0,rus:""};
	$.post("/bin/cms/api.php",{action: "GetRusmaterial", param1:d}, $.proxy(function(data){
		var d2 = eval('(' + data + ')');
		this.id = d2.id;
		this.rus = d2.rus;
		alert(this.id);
	},d1));
	alert(d1.id);
	return d1;
};


Вот такой вот код не выдает никаких ошибок, однако как только мы выходим за пределы функции, в которой мы пытаемся изменить объект, переданный как контекст в нашу callback-функцию, оказывается, что данный объект изменен не был. Другими словами, первый alert выдает одно значение, а второй alert опять сообщает, что d1.id равно 0.

danik.js 15.05.2013 16:52

// эмулируем jQuery
$ = {
    post: function(url, data, callback) {
        var data = '{"id":100500,"rus":"гыгы"}';
        setTimeout(function(){ callback(data) });
    },
    proxy: function(fn, context) {
        return fn.bind(context);
    }
};

function GetRusMaterial(d) {
    var d1 = {id:0,rus:""};
    $.post("/bin/cms/api.php",{action: "GetRusmaterial", param1:d}, $.proxy(function(data){
        var d2 = JSON.parse(data);
        this.id = d2.id;
        this.rus = d2.rus;
        alert('Новое значение:' + d1.id);
    },d1));
    alert('Начальное значение: ' + d1.id);
    return d1;
};

GetRusMaterial(1);


Не вижу никаких противоречий.


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