рдХрд┐рд╕реА рдХреНрд▓реЛрдЬрд╝рд░ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрджрд░реНрдн рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

var singleton = (function () { var data, method_args; data = []; method_args = []; function add (items) { var i; data.push(items); method_args.push(arguments); } function remove () { data.pop(); method_args.push(arguments); } return { add : add, remove : remove } }()); 

рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИред

рд╕рд┐рдВрдЧрд▓рдЯрди рдкрдмреНрд▓рд┐рдХ рдореЗрдердбреНрд╕ (рдЗрд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡реИрд▓реНрдпреВ рдХреНрд▓реЛрдЬрд░ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдЙрд╕ рдРрд░реЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рдпрд╣ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╕рд░рдгреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛_рдЕрд░реНрд╕.рдкрд╢ , рдЖрдк Array.prototype.push рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╕реНрддреБ рдХреА "рдЪреЛрд░реА" рдХреЗ рдмрд╛рдж рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╕рдм рдХреБрдЫ рдХреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде)ред

 var original_push, data; //    original_push = Array.prototype.push; //    Array.prototype.push = function () { //   data = this; }; //    singleton.add(); //      Array.prototype.push = original_push; //     console.log(data); 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреБрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреА рдПрдХ рдмрд╛рд░ рдХреА рд╡рд┐рдлрд▓рддрд╛ рд╕реЗ рдмреНрд░реЗрдХрдбрд╛рдЙрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдореИрдВ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдХрд╛рдо рдХреЗ рдорд╛рдирдХ рддрд░реНрдХ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИред рд╣рдо рдПрдХ рдирдИ рдкреБрд╢ рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдХреЙрд▓ рдкрд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреА рд╣реИред

 var original_push, fake_method_calls, data; //    original_push = Array.prototype.push; //  fake_method_calls = 0; //    Array.prototype.push = function () { //  this     if (fake_method_calls === 0) { data = this; } fake_method_calls += 1; //   return original_push.apply(this, arguments); } //    singleton.add(); //      Array.prototype.push = original_push; //     console.log(data); 

рд╡реЛрдЗрд▓рд╛: рднреЗрдбрд╝ рдмрд░рдХрд░рд╛рд░ рд╣реИрдВ (рдорд╛рдирдХ рддрд░реНрдХ рдирд╣реАрдВ рдЯреВрдЯрд╛ рд╣реИ) рдФрд░ рднреЗрдбрд╝рд┐рдпреЗ рднрд░реЗ рд╣реБрдП рд╣реИрдВ (рд╣рд╛рде рдореЗрдВ рд▓рд┐рдВрдХ)ред

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


All Articles