рдореИрдВ рдмрд╕ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдореЗрдВ рдХреИрд╕реЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред
рд▓реЗрдЦ рдЕрднрд┐рдирд╡ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреАрди рдЕрдбрд╝рдЪрдиреЗрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рд╕рдВрджрд░реНрдн, рд╕рд░реНрд╡рд░ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдмрдВрдзреЗ рдирд╣реАрдВ)ред
рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓реЛрдЬрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рд╣реИрдВред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрд▓реЛрдЬрд╝рд░ рд╕рднреА рдХрд╛рд░реНрдп рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ "рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди" рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИрдВред
рд╡реЗ рдХреНрдпрд╛ рдкрд╕рдВрдж рд╣реИрдВ? "рдмрдВрдж" рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?
рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЕрд░реНрде рд╣реИ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд▓реЙрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рди рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдмрд▓реНрдХрд┐ рдКрдкрд░ рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдкрд░ рдмрдирд╛рдП рдЧрдП рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред
рдореИрдВ рдХреЛрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛:
var a = 1; var b = 2; function closureFirstLevel() { return a + b; } function createrOfSecondLevelClosure() { var c = a + b; return function() { return c + closureFirstLevel() + a + b; } } var c = createrOfSecondLevelClosure(); function runCInAnotherContext() { return c(); } console.log(a,b); console.log(' a & b :',closureFirstLevel()); console.log(' c ( ), , a b :',c());
рдЕрдм рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдордЭ рд▓реЗрдВ рдЕрдЧрд░ рдХреБрдЫ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИред
closureFirstLevel рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди (рдмрд╛рд╣рд░реА рдЪрд░) рдХреЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рд░рд╛рд╢рд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
craitOfSecondLevelClosure рдЪрд░ рдФрд░ рдП рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдореЗрдВ рдЕрдкрдиреА рд░рд╛рд╢рд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕реА рдХреЗ рдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдмрдВрдж рд╣реЛрдиреЗ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред FirstLevel рдФрд░ рдЪрд░ рдЪрд░ рдФрд░ рдмреА рджреЛ рд╕реНрддрд░реЛрдВ рдХреЛ рдХрдо рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк runCInAnotherContext рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдлрдВрдХреНрд╢рди 'c' рдХреЛ рд░рди рдХрд░реЗрдЧрд╛ (рдЖрдЦрд┐рд░рдХрд╛рд░, craitOfSecondLevelClosure рдПрдХ рдлрдВрдХреНрд╢рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡реИрд░рд┐рдПрдмрд▓ 'c' рдЗрд╕ рдлрдВрдХреНрд╢рди рдореЗрдВ рдбрд┐рдХреНрд▓реЗрдпрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдЬреЛ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛: рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдпреЛрдЧ рдФрд░ рдлрдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдоред runCInAnotherContext рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдиреЗ рд╕реНрд╡рдпрдВ рдХреЛ рдЗрди рдЪрд░реЛрдВ рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдШрдЯрдирд╛ рд╕реГрдЬрди рдореЗрдВ рдХреНрд▓реЛрдЬрд░ред
рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣рдореЗрд╢рд╛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╣реИ) рдЬрдмрдХрд┐ рд▓реВрдк рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕рднреА рдмрдирд╛рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЗрд╕ рдЪрд░ рдХрд╛ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ
var elem = document.getElementsByTagName('a'); for (var n = 0, l = elem.length; n < l; n++ ) { elem[n].onclick = function() { alert(n); return false; } }
рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
var elem = document.getElementsByTagName('a'); for (var n = 0, l = elem.length; n < l; n++ ) { elem[n].onclick = function(x) { return function() { alert(x); return false; } }(n);
рдФрд░ рдЖрдк рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, forEach рд╡рд┐рдзрд┐ (EcmaScript5 рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛) рд▓реВрдк рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЬреЛ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ: elementOfArray, positionInArray, Arrayред рдФрд░ рд╣рд░ рдмрд╛рд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╣реАрдВ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред
рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдмрджрд▓рдХрд░ рдЕрдкрдиреА рдиреЛрдбрд▓рд┐рд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреЗрдЦреЗрдВ)ред
var elem = document.getElementsByTagName('a'); Array.prototype.forEach.call(elem,function(el,position) { el.onclick = function() { alert(position); return false; } })
рдпрд╣ рдХреАрд╡рд░реНрдб
рдпрд╣ рд╢рдмреНрдж рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА
рд╡рд░реНрддрдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдШреЛрд╖рд┐рдд рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдВрдбреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЗ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ) рд╣реИрдВ, рдФрд░ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд┐рдирд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрдм рддрдХ рдЖрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
var a = { property1: 1, property2: 2, func: function() { console.log(this.property1 + this.property2, 'test'); return this.property1 + this.property2; } } console.log(a.func());
рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╕реЗрдЯ рдЗрдиреНрдЯрд░рд╡рд▓ рдпрд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: elem.onclick рдпрд╛ addEventListener), рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдЖрд╕реНрдердЧрд┐рдд рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕рднреА рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреА рд╣рд╛рдирд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред
рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ рдРрд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ = рдпрд╣ рдЪрд░ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рддрдерд╛рдХрдерд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ), рдФрд░ рд╕рдмрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ - рдЗрд╕реЗ рдЬрдмрд░рди рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмрд╛рдЗрдВрдб рд╡рд┐рдзрд┐ рд╣реИ (рдпрд╣ рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдорд╛рдирдХ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдЬреЛ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджрд░реНрдн рдФрд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реИред рдЙрджрд╛рд╣рд░рдг:
function logCurrentThisPlease() { console.log(this); } logCurrentThisPlease();
рдЦреИрд░, рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣рд╛рдирд┐ред
var a = { i: 0, infinityIncrementation: function() { console.log( this.i++ ); if (this.i < Infinity) setTimeout(this.infinityIncrementation,500); } } a.infinityIncrementation(); // 0,undefined тАФ , a.infinityIncrementation = a.infinityIncrementation.bind(a); // a.infinityIncrementation(); //0,1,2,3,4,5,6,7,8,9,10...Infinity-1 // var b = { i: 0, infinityIncrementation: function() { console.log( this.i++ ); if (this.i < Infinity) setTimeout(function() {this.infinityIncrementation}.bind(this),500); } } b.infinityIncrementation(); //0,1,2,3,4,5,6,7,8,9,10...Infinity-1
рджреВрд╕рд░рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рд╣реА рдФрд░ рдкрд╣рд▓рд╛ рдЧрд▓рдд рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдЦ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рднрд╛рдЧ рджреЗрдЦреЗрдВред
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддрд░реАрдХреЗ рдЬреЛ рдЖрдкрдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ - рдмрд╛рдзреНрдп рдХрд░реЗрдВ, рдХреЙрд▓ рдХрд░реЗрдВ, рд▓рд╛рдЧреВ рдХрд░реЗрдВ
Function.bind рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЛ рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдХреНрдпрд╛ рд╣реЛрдЧрд╛), рдФрд░ рд╢реЗрд╖ рдПрдХ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд╝рдВрдХреНрд╢рди .apply рд╡рд╣ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ, рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╡рд╣ рддрд░реНрдХ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдпрд╣ рд╣реЛрдЧрд╛, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдХрд╛ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
Function.call рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рдмрдЬрд╛рдп, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕
рдХрдИ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ:
function SuperObjectConstructor() { this.a = 1; this.b = 2; this.summ = function() { return this.a + this.b; } }
рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЧрд▓рдд рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдмреЙрдбреА рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмреБрд░рд╛ рдХреНрдпреЛрдВ рд╣реИ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдмрджрд▓рдХрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░рдВрдн рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рджреВрд╕рд░реЗ рдХреЛ рд╡рд┐рдзрд┐ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреА рдХреНрд╖рдорддрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рджреВрд╕рд░реА рдмрд╛рдд - рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдЦрдкрдд:
var a = new SuperObjectConstructor(); var b = new SuperObjectConstructor(); console.log(a.summ == b.summ);
рдЪреВрдВрдХрд┐ рд╣рд░ рдмрд╛рд░ рдПрдХ рдлрдВрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕реНрд╡рд░ (рдФрд░ рдХреЛрдб рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП) рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЪрд░ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рд╡рд╕реНрддреБ рдХреЗ рдХреНрд╖реЗрддреНрд░) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реЛрдЧрд╛ред
рдмрд╛рдХреА рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреЗрд╣рддрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдкрддреНрддрд┐ рдпрд╛ рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реАрдзреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВ:
function SuperObjectConstructorRightVersion(a,b) SuperObjectConstructorRightVersion.prototype = } /* SuperObjectConstructorRightVersion.prototype.a = 1; SuperObjectConstructorRightVersion.prototype.b = 2; SuperObjectConstructorRightVersion.prototype.summ = function() ; . */ var abc = new SuperObjectConstructorRightVersion(); console.log(abc.summ());
рдХрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЕрднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╕реНрд╡рдпрдВ-рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдирд┐рдЬреА рддрд░реАрдХреЗ рдФрд░ рдХрд╛рд░реНрдп, рдЬрд┐рдирдореЗрдВ рдХреЗрд╡рд▓ рд╡рд╕реНрддреБ рдФрд░ рдЙрд╕рдХреЗ рддрд░реАрдХреЗ рд╕реАрдзреЗ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдХреНрд╕рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ- рдбрд┐рдЬрд╛рдЗрдирд░ред рдХрдИ рд▓реЛрдЧ рдпрд╣ рднреА рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕реНрд╡рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рд╕реНрд╡рд░ рдХреНрдпреЛрдВ рд╣реИред
рдХрд╛рд░рдг рдПрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕реНрд░реЛрдд рдореЗрдВ рдЬрд╛рдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рди рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред
рдЗрди "рдирд┐рдЬреА" рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдирд╛ рднреА рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рдПрдХ рдФрд░ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдмрд╕ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрд╛рдЗрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ (рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди, рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдпрд╣ рд╣рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдиреНрдп рдПрдиреЗрдорд░реЗрдмрд▓ (рдПрдиреБрдорд░реЗрдЯреЗрдб) рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП forEach array рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЛрдбрд▓рд┐рд╕реНрдЯ (рдЬреАрд╡рд┐рдд рдФрд░ рдирд┐рд░реНрдЬреАрд╡) (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрдм рдЖрдЗрдП рд▓реЗрдЦ рдХреЗ рдХрдВрдЯреЗрдВрдЯ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдПрдХ рдмрдбрд╝реЗ рд░рдЪрдирд╛рдХрд╛рд░ рдХреЛ рди рд▓рд┐рдЦреЗрдВред
function Monster(name, hp, dmg) { this.name = name || this.constructor.prototype.name(); this.hp = hp || this.constructor.prototype.hp; this.dmg = dmg || this.constructor.prototype.dmg; } Monster.prototype = { constructor: Monster, hp: 10, dmg: 3, name: function() { return 'RandomMonster'+(new Date).getTime(); }, offerFight: function(enemy) { if (!enemy.acceptFight) { alert('this thing cant fight with me :('); return; } enemy.acceptFight(this); this.acceptFight(enemy); }, acceptFight: function(enemy) { var timeout = 50 + this.diceRollForRandom(); this.attack(enemy,timeout); }, diceRollForRandom: function() { return (Math.random() >= 0.5 ? 50 : 20); }, takeDmg: function(dmg) { console.log(this.name,' was damaged (',dmg,'),current HP is ',this.hp-dmg); return this.hp -= dmg; }, attack: function(enemy,timeout) { if (enemy.takeDmg(this.dmg) <= 0) { enemy.die(); this.win(); return; } this.to = setTimeout(function() {this.attack(enemy)}.bind(this),timeout); }, win: function() { alert('My name is ' + this.name + ', and Im a winner'); }, die: function() { alert('I died, ' + this.name); clearTimeout(this.to); } } var ChuckNorris = new Monster('Chuck Norris', 100, 100); var MikhailBoyarsky = new Monster('Misha Boyarsky', 200, 50); MikhailBoyarsky.offerFight(ChuckNorris);
рдЗрд╕ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╣реИ: рдХреЙрд▓ рд╕рдВрджрд░реНрдн рдХреЛ рд╕рд╣реЗрдЬрдирд╛, рдмрдВрдж рдХрд░рдирд╛ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ред
рдореИрдВ рдЖрд▓реЛрдЪрдирд╛ рдФрд░ рд╕реБрдзрд╛рд░реЛрдВ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ (рдХреНрдпреЛрдВрдХрд┐ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рдореИрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рд╕рдХрддрд╛ рдерд╛, рдпрд╛ рдореИрдВ рд╕рд┐рд░реНрдл рдЧрд▓рдд рд╣реВрдВ)ред
ps boyars рдХрднреА-рдХрднреА рдЬреАрдд рдЬрд╛рддреЗ рд╣реИрдВ ред