рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдпрд╣ рдХреАрд╡рд░реНрдб

рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдЬрд╛рдХреНрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

function Loader() { this.load = function() { $.ajax({ url: '/test.php', success: function(data, textStatus, jqXHR) { //         console.log(this); // this    jQuery, //   success } }); } } (new Loader()).load(); 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - i.e. рдпрд╣ рд╡рд╣реА рд╣реЛрдЧрд╛ рдЬреЛ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдЬреЛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

 function cb(object, fnc) { return function() { return fnc.apply(object, arguments); } } 

рдСрдмреНрдЬреЗрдХреНрдЯ - рдЗрд╕ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ
fnc - рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХрд╛рд░реНрдп
рддрд░реНрдХреЛрдВ - рд╕рдорд╛рд░реЛрд╣ рддрд░реНрдХреЛрдВ рдХреА рдорд╛рдирдХ рд╡рд╕реНрддреБ

рдЕрдм рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

 function Loader() { this.load = function() { $.ajax({ url: '/test.php', success: cb(this, this.onLoad) }) } this.onLoad = function(data, textStatus, jqXHR) { console.log(this); // this     Loader } } (new Loader()).load(); 

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдордХреНрдЦреА рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 cb(this, function(data, textStatus, jqXHR) { console.log(this); }); 

рдореВрд▓ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЛ рд╕рд╣реЗрдЬрдирд╛


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЦреЛ рджрд┐рдпрд╛ рдЬрд┐рд╕реЗ рд╕рдлрд▓рддрд╛ рдлрд╝рдВрдХреНрд╢рди (рдЖрдВрддрд░рд┐рдХ jQuery рдСрдмреНрдЬреЗрдХреНрдЯ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдХреЙрд▓рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, HTML рддрддреНрд╡ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ:

 function Button() { this.render = function() { var submit = $('<button>').html('click me'); submit.bind('click', function(event) { //  this  HTML-,   console.log(this); }); submit.appendTo($('body')); } } (new Button()).render(); 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдмрдЯрди рдПрдЪрдЯреАрдПрдордПрд▓ рддрддреНрд╡ рдХрд╛ рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрдЯрди рдХрд╛ HTML рддрддреНрд╡), рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд▓реЗрдЧрд╛:

 function cb(object, fnc) { return function() { var args = [this]; for (var i in arguments) args.push(arguments[i]); return fnc.apply(object, args); } } 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЙрд▓рд░ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╢реЗрд╖ рддрд░реНрдХреЛрдВ рдХреЛ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

 function Button() { this.render = function() { var submit = $('<button>').html('click me'); submit.bind('click', cb(this, this.onClick)); submit.appendTo($('body')); } this.onClick = function(target, event) { console.log(this); // this     Button console.log(target); // HTML-,   } } (new Button()).render(); 

Source: https://habr.com/ru/post/In141463/


All Articles