рд▓рдЧрднрдЧ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдкреВрдЫрд╛: тАЬрдореИрдВ рдПрдХ рдмрдбрд╝реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛, рдореИрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред " рдЕрднреНрдпрд╛рд╕ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕реЗ рджреВрд░ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЗрд╡реЗрдВрдЯ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдордВрджрд┐рд░ рдореЗрдВ рдЕрдкрдиреА рдЙрдВрдЧрд▓реА рдШреБрдорд╛ рджреА рдФрд░ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдПрдХ рднрдпрд╛рдирдХ рдмрдХрд╡рд╛рд╕ рдерд╛, рдпрд╣ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣, рдмрд╕, рдЕрд╕рдВрднрд╡ рд╣реИред
рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ, рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЧрд░реНрдо рд╕рд░реНрджрд┐рдпреЛрдВ рдХреА рд╢рд╛рдо рдХреЛ, рдУрдбреЗрд╕рд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ, рдореИрдВ рдПрдХ рдЕрд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛: "рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдмреЛрдЧрдбрд╛рди рдиреЗ рдЫрд╣ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдкреВрдЫрд╛ рдерд╛?" рдШрд░ рдкрд╣реБрдВрдЪрдХрд░, рдореИрдВрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдФрд░, рдХреБрдЫ рдорд┐рдирдЯреЛрдВ рдХреЗ рднреАрддрд░, рдореИрдВрдиреЗ рдЬреЛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдереА, рд╡рд╣ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА рдХрд┐ рдЕрдЧрд░ рд╡реЗ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрд░реАрдХреЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдкреБрдирд░реНрд╡рд┐рддрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдерд╛ред рдореБрдЭреЗ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрджрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдкрд┐рдЫрд▓реЗ рд╕реНрд╡рд░реВрдк рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдПред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╣ рдереЗред рдпрд╣ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдореБрдЭреЗ рдХрднреА рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди, рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ, рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдирд┐рд╖реНрдкрд╛рджрди рдкрд░рд┐рдгрд╛рдо
- рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП
- рдХреЙрд▓ рдХрд╛ рд╕рдВрджрд░реНрдн (рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдХреНрдпрд╛ рд╣реИ)
- рд╣реИрдВрдбрд▓рд░ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛
(рдпрд╣ рд╕реВрдЪреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ)
addCallListener = function(func, callback){ var callNumber = 0; return function(){ var args = [].slice.call(arguments); var result; try { result = func.apply(this, arguments); callNumber++; } catch (e) { callback(e, args, this, callNumber); throw e; } callback(result, args, this, callNumber); return result; } }
рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рд╕рд╣реА?
рдлрд┐рд░, рд╣рдо рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
someFunct = addCallListener(someFunct, function(result, args, self, callNumber){
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдХреЛрдб рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ "рджреГрд╢реНрдпрдорд╛рди" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд╣рд╛рдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИред
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдУрдкрди рдХрдВрд╕реЛрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреНрд░реЛрдо рдореЗрдВ рдЗрд╕реЗ Ctrl + Shift + i) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдиреАрдореЗрд╢рди рдЯреНрд░реИрдХрд┐рдВрдЧ:
jsfiddle.net/finom/DnRD8рд╕рд░рдгреА рдореЗрдВ рдкреБрд╢ рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдШрдЯрдирд╛:
jsfiddle.net/finom/bbHhH/1рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╛рд░реЛрд╣ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдШрдЯрдирд╛:
jsfiddle.net/finom/ah5My/3рдЕрдВрддред
рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд▓рд┐рдП javascript.ru рдлреЛрд░рдо рдХреЗ рд╕рд╛рдерд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдпреБрдкреАрдбреА
рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди: рдЕрдм, рдПрдХ рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрдЬрд╛рдп, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ
- рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ (рд╕рдорд╛рд░реЛрд╣ рдЪрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛)
- рд╕рдлрд▓рддрд╛ (рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ)
- рддреНрд░реБрдЯрд┐ (рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ)
- рдХреЗ рдмрд╛рдж (рд╡реИрд╕реЗ рднреА, рд╕рдлрд▓рддрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛)
рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЖрд░реНрдЧ
- рд╕реНрд╡ (рд╕рдВрджрд░реНрдн)
- рдирд╛рдо (рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо)
- рд╕реНрдерд┐рддрд┐ ("рддреНрд░реБрдЯрд┐" рдпрд╛ "рд╕рдлрд▓рддрд╛")
- рд╕рдХреНрд╕реЗрд╕ рдирдореНрдмрд░ (рд╕рдлрд▓ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛)
- errorNumber (рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛)
- рдкрд░рд┐рдгрд╛рдо (рдкрд░рд┐рдгрд╛рдо, рдпрджрд┐ рдХреЛрдИ рд╣реЛ)
- рддреНрд░реБрдЯрд┐ (рддреНрд░реБрдЯрд┐, рдпрджрд┐ рдХреЛрдИ рд╣реЛ)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, addCallListener рдлрд╝рдВрдХреНрд╢рди рдЕрдм рдлрдВрдХреНрд╢рди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдПрдХ рд╡рд┐рдВрдбреЛ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред
рдЖрдк рдпрд╣рд╛рдВ рдХрд╛рдВрдЯрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
jsfiddle.net/finom/SGhzd/5