рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреНрд░рд╛рдВрддрд┐ред

рдкрд░рд┐рдЪрдп



рдПрдХ рдХреНрд░рд╛рдВрддрд┐ рдЖ рд░рд╣реА рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЬреНрдЮрд╛рдд рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдкрд╛рджрди рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ MVC рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рддреИрдпрд╛рд░ рд╣реИрдВ?



рдЕрдЪреНрдЫрд╛, рдЕрдЪреНрдЫрд╛ред рд╣рдо рдирд╣реАрдВ рдЦреАрдВрдЪреЗрдВрдЧреЗред рдореБрдЭреЗ рдЖрдкрдХреЛ Object.observe () рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЦреБрд╢реА рд╣реИ, рдЬреЛ Chrome 36 рдХреЗ рдмреАрдЯрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред [CROWD HAPPY]



Object.observe () рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд ECMAScript рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ... рдХрд┐рд╕реА рднреА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред





//  ,        var model = {}; //      Object.observe(model, function(changes){ //     , changes.forEach(function(change) { //   ,   console.log(change.type, change.name, change.oldValue); }); });
      
      





рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХреЛрдИ рд╡рд╕реНрддреБ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдЕрд▓рд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:





Object.observe () рдХреЗ рд╕рд╛рде (рдореИрдВ рдЗрд╕реЗ Oo () рдпрд╛ Oooooooo рдХрд╣рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ), рдЖрдк рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



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



рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдкреВрд░реНрдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреМрдЦрдЯреЗ рдпрд╛ рдПрдорд╡реА * рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдУрдУ () рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдПрдХ рддреНрд╡рд░рд┐рдд, рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рд╕рдордп рдЙрд╕реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреЛрдгреАрдп рд╡рд┐рдХрд╛рд╕ рджрд▓ рдиреЗ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдЧрдВрджреА-рдЬрд╛рдБрдЪ рдореЗрдВ рд▓рдЧрднрдЧ 40ms рд▓рдЧрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ O.o () рдореЗрдВ рд▓рдЧрднрдЧ 1-2ms рд▓рдЧрддреЗ рд╣реИрдВ (рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 20-40 рдЧреБрдирд╛ рддреЗрдЬрд╝ рд╣реИ)ред

рдЬрдЯрд┐рд▓ рдХреЛрдб рдХреЗ рдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ! рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдард╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ!



рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ O.o рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ (), рддреЛ рдЖрдк рддреБрд░рдВрдд рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдлреНрд▓рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣рд▓ рдХрд░рддреА рд╣реИред



рд╣рдо рдХреНрдпрд╛ рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?



рдЬрдм рд╣рдо рдбреЗрдЯрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рдЖрдорддреМрд░ рдкрд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:



рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдорд╣рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ



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



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



рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрдВрддреНрд░ рдирд╣реАрдВ рдерд╛, рдФрд░ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪреМрдЦрдЯреЗ (рдпрд╛ рдЫреЛрдЯреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓рд┐рдЦрд╛) рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдЗрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рджреБрдирд┐рдпрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдзреАрдореА рд╣реИрдХ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред



рдЖрдЬ рджреБрдирд┐рдпрд╛ рдХреНрдпрд╛ рд╣реИ?



рдЧрдВрджреА рдЬрд╛рдБрдЪ


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



 <html ng-app> <head> ... <script src="angular.js"></script> <script src="controller.js"></script> </head> <body ng-controller="PhoneListCtrl"> <ul> <li ng-repeat="phone in phones"> {{phone.name}} <p>{{phone.snippet}}</p> </li> </ul> </body> </html>
      
      





рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:



 var phonecatApp = angular.module('phonecatApp', []); phonecatApp.controller('PhoneListCtrl', function($scope) { $scope.phones = [ {'name': 'Nexus S', 'snippet': 'Fast just got faster with Nexus S.'}, {'name': 'Motorola XOOM with Wi-Fi', 'snippet': 'The Next, Next Generation tablet.'}, {'name': 'MOTOROLA XOOM', 'snippet': 'The Next, Next Generation tablet.'} ]; });
      
      





(рдирдореВрдирд╛)



рдЬрдм рднреА рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ, DOM рдореЗрдВ рд╣рдорд╛рд░реА рд╕реВрдЪреА рдЕрдкрдбреЗрдЯ рдХреА рдЬрд╛рдПрдЧреАред рдХреЛрдгреАрдп рдпрд╣ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ? рдареАрдХ рд╣реИ, рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд╡рд╣ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЧрдВрджрд╛-рдЬрд╛рдБрдЪ рдХрд╣рддреЗ рд╣реИрдВред







рдЧрдВрджреЗ-рдЬрд╛рдБрдЪ рдХрд╛ рдореМрд▓рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдмрджрд▓ рдЧрдпрд╛ред рдПрдХ рдХреЛрдгреАрдп рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЙрди рд╕рднреА рдореЙрдбрд▓ рдбреЗрдЯрд╛ рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд╣ рдореЙрдбрд▓ рдХреЗ рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИред рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рджреЗрд╢реА рдЬреЗрдПрд╕ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдЧрдардмрдВрдзрди рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рджреВрд╕рд░реА рдУрд░, рдЗрд╕ рд╣рдж рддрдХ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрд╣реБрдд рдкреНрд░рдЪрдВрдб рд╣реИ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред







рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреА рд▓рд╛рдЧрдд рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЕрдиреБрдкрд╛рдд рдореЗрдВ рд╣реИред рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореБрдЭреЗ "рд╢рд╛рдпрдж" рдореЙрдбрд▓ рдмрджрд▓рдиреЗ рдкрд░ рдЧрдВрджреА-рдЪреЗрдХрд┐рдВрдЧ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдХреБрдЫ рддрд░рдХреАрдмреЗрдВ рд╣реИрдВ, рдЬреЛ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддреА рд╣реИрдВред рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдирд┐рд░реНрдгрдп рдзреНрдпрд╛рди рдореЗрдВ рдЖрдПрдЧрд╛ред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗрдм рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЕрдкрдиреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрдВрддреНрд░ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХ рдЕрд╡рд╕рд░ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП



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



 // - MyApp.president = Ember.Object.create({ name: "Barak Obama" }); MyApp.country = Ember.Object.create({ //  "Binding"     Ember  , //        presidentNameBinding: "MyApp.president.name" }); // ,    Ember   MyApp.country.get("presidentName"); // " " //      , // ..     .
      
      





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



рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореМрдЬреВрджрд╛ JS рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рд╛рдзрд╛рд░рдг рдбреЗрдЯрд╛ (рдХрдВрдЯреЗрдирд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдирд╣реАрдВ, рдЖрджрд┐ ) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред



Object.observe рдХрд╛ рдкрд░рд┐рдЪрдп ()



рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЗрди рджреЛ рдмреНрд░рд╣реНрдорд╛рдВрдбреЛрдВ рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ (рджреЗрд╢реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╕реНрддреБрдУрдВ) рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЧрдВрджреЗ-рдЬрд╛рдБрдЪ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд▓реЗрдВ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдЕрдЪреНрдЫреЗ рд╕реЗ рдЬреЛрдбрд╝реЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВред рдХреЛрдИ рд╣реИ рдЬреЛ рдЗрди рд╕рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЧреБрдгреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдЧрд╛ рдФрд░ рдордВрдЪ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ, рдорд┐рд▓рддреЗ рд╣реИрдВ - Object.observe (), рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░!



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





Object.observe () рдФрд░ Object.unobserve ()



рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:



 //       var todoModel = { label: 'Default', completed: false };
      
      





рд╣рдо рдПрдХ рд░рд┐рдЯрд░реНрди рдлрдВрдХреНрд╢рди рднреА рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реА рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛



 function observer(changes){ changes.forEach(function(change, i){ console.log('what property changed? ' + change.name); console.log('how did it change? ' + change.type); console.log('whats the current value? ' + change.object[change.name]); console.log(change); // all changes }); }
      
      





рдиреЛрдЯ: рдЬрдм рдСрдмреНрдЬрд░реНрд╡рд░ рдкрд░ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрдИ рдмрд╛рд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рдирдП рдореВрд▓реНрдп рдФрд░ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред



рд╣рдо рдУрдУ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рджрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ:



 Object.observe(todoModel, observer);
      
      





рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:



 todoModel.label = 'Buy some more milk';
      
      





рдХрдВрд╕реЛрд▓ рдХреЛ рджреЗрдЦреЗрдВ, рд╣рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реА! рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИ, рдЗрд╕реЗ рдХреИрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕ рдирдП рдореВрд▓реНрдп рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред



рд╡рд╛рд╣! рдЕрд▓рд╡рд┐рджрд╛, рдЧрдВрджрд╛-рдЬрд╛рдБрдЪ! рдЖрдкрдХреЗ рдордХрдмрд░реЗ рдкрд░ рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдХреЙрдорд┐рдХ рд╕реИрдВрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдХреЗрд░рд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЗрдП рджреВрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдмрджрд▓реЗрдВред рдЗрд╕ рдмрд╛рд░ рдкреВрд░реНрдг:



 todoModel.completeBy = '01/01/2014';
      
      





рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХреА:



рдареАрдХ рд╣реИ, рдЕрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рд╕реЗ "рдкреВрд░реНрдг" рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ:



 delete todoModel.completed;
      
      







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



рдХрд┐рд╕реА рднреА рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреА рддрд░рд╣, рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Object.unobserve () рд╣реИ, рдЬрд┐рд╕рдореЗрдВ Oo () рдХреЗ рд╕рдорд╛рди рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдиреНрд╣реЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 Object.unobserve(todoModel, observer);
      
      





рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐рдП рдЧрдП рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдЕрдм рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред





рдЧреБрдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ



рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдо рдореВрд▓ рдмрд╛рддреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдП, рддреЛ рдЖрдЗрдП, рдЕрд╡рд▓реЛрдХрди рдХреА рдЧрдИ рд╡рд╕реНрддреБ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдБред



 Object.observe(obj, callback, opt_acceptList)
      
      





рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



 //     ,       var todoModel = { label: 'Default', completed: false }; //        // ,    function observer(changes){ changes.forEach(function(change, i){ console.log(change); }) }; //         , //    ,    Object.observe(todoModel, observer, ['delete']); //        //      todoModel.label = 'Buy some milk'; //  ,    !
      
      





рдЕрдм, рдпрджрд┐ рд╣рдо "рд▓реЗрдмрд▓" рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдЖрдПрдЧреА:



 delete todoModel.label;
      
      





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



рдЕрдзрд┐рд╕реВрдЪрдирд╛



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



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



рдЕрд▓рд░реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЫрд╡рд┐



рдФрд░ рдЕрдм рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:



 //    var model = { a: {} }; //   ,      //     var _b = 2; //    "b"    "a" //       Object.defineProperty(model.a, 'b', { get: function () { return _b; }, set: function (b) { //   "b"   , //       // ,   .    //     Object.getNotifier(this).notify({ type: 'update', name: 'b', oldValue: _b }); //        //  -   console.log('set', b); _b = b; } }); //    function observer(changes) { changes.forEach(function (change, i) { console.log(change); }) } //     model.a Object.observe(model.a, observer);
      
      









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



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



рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреА рдУрд░ рд╕реЗ рднреА, рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдХреЛрдИ рднреА рддреГрддреАрдп-рдкрдХреНрд╖ рдлрд╝рдВрдХреНрд╢рди рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдП, рдЖрджрд┐ред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЕрд╕рдВрдЧрддрд┐ рдФрд░ рд╡рд┐рдЦрдВрдбрди рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд╣реИ рдирд╛? рдФрд░ рдЗрд╕ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪреЛрдВ, рдФрд░ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЬреАрд╡рди рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛ рд╕рдХрддреА рд╣реИрдВред рдФрд░ рдирддреАрдЬрддрди, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕рдордЭрдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЖрдЬ, рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИред



рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдЕрднрд┐рд▓реЗрдЦреЛрдВ рдХрд╛ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди



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







рдПрдХреНрд╕реЗрд╕рд░реЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдиреЛрдЯрд┐рдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдиреЛрдЯ (рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди)ред рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдмрджрд▓реЗ рд╣реБрдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВред Object.observe рд╣рдо рдкрд░ "рд╕рд╣реА" рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдереЛрдкрддрд╛ред



рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЕрдм рдЕрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд░реНрдХрд┐рд▓ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░реНрдХрд▓ рдФрд░ рдЗрд╕рдХреА "рддреНрд░рд┐рдЬреНрдпрд╛" рд╕рдВрдкрддреНрддрд┐ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рддреНрд░рд┐рдЬреНрдпрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛, рдФрд░ рдЬрдм рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдШрдЯрдирд╛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧреАред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рд╕рднреА рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреЛрдб рджреЗрд╡рдЯреВрд▓ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛:



 function Circle(r) { var radius = r; var notifier = Object.getNotifier(this); function notifyAreaAndRadius(radius) { notifier.notify({ type: 'update', name: 'radius', oldValue: radius }) notifier.notify({ type: 'update', name: 'area', oldValue: Math.pow(radius * Math.PI, 2) }); } Object.defineProperty(this, 'radius', { get: function() { return radius; }, set: function(r) { if (radius === r) return; notifyAreaAndRadius(radius); radius = r; } }); Object.defineProperty(this, 'area', { get: function() { return Math.pow(radius, 2) * Math.PI; }, set: function(a) { r = Math.sqrt(a)/Math.PI; notifyAreaAndRadius(radius); radius = r; } }); } function observer(changes){ changes.forEach(function(change, i){ console.log(change); }) }
      
      







рдЧреМрдг рдЧреБрдг



рдЧреМрдг рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ рдиреЛрдЯред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рд▓реЗрдХрд┐рди рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдпрд╛ рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред



рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: рд╡реЗ рдмрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред



рдПрдХрд▓ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛



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





рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓рд╛рд╡



рд╢рд╛рдпрдж рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрджрд╕реВрд░рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реИред

Oo () рдЗрд╕рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИ: notifier.performChange () рдФрд░ notifier.notify (), рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдмрд╛рдд рдХреА рдереАред







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



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: notifier.performChange ('foo', PerformFooChangeFn);

 function Thingy(a, b, c) { this.a = a; this.b = b; } Thingy.MULTIPLY = 'multiply'; Thingy.INCREMENT = 'increment'; Thingy.INCREMENT_AND_MULTIPLY = 'incrementAndMultiply'; Thingy.prototype = { increment: function(amount) { var notifier = Object.getNotifier(this); //  ,       //   : // notifier.performChange('foo', performFooChangeFn); // notifier.notify('foo', 'fooChangeRecord'); notifier.performChange(Thingy.INCREMENT, function() { this.a += amount; this.b += amount; }, this); notifier.notify({ object: this, type: Thingy.INCREMENT, incremented: amount }); }, multiply: function(amount) { var notifier = Object.getNotifier(this); notifier.performChange(Thingy.MULTIPLY, function() { this.a *= amount; this.b *= amount; }, this); notifier.notify({ object: this, type: Thingy.MULTIPLY, multiplied: amount }); }, incrementAndMultiply: function(incAmount, multAmount) { var notifier = Object.getNotifier(this); notifier.performChange(Thingy.INCREMENT_AND_MULTIPLY, function() { this.increment(incAmount); this.multiply(multAmount); }, this); notifier.notify({ object: this, type: Thingy.INCREMENT_AND_MULTIPLY, incremented: incAmount, multiplied: multAmount }); } }
      
      







рд╣рдо рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рджреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ: рдПрдХ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рджреВрд╕рд░рд╛ рдЙрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (Thingy.INCREMENT, Thingy.MULTIPLY, Thingy.INCREMENT_AND_MIPIPLY)ред



 var observer, observer2 = { records: undefined, callbackCount: 0, reset: function() { this.records = undefined; this.callbackCount = 0; }, }; observer.callback = function(r) { console.log(r); observer.records = r; observer.callbackCount++; }; observer2.callback = function(r){ console.log('Observer 2', r); } Thingy.observe = function(thingy, callback) { // Object.observe(obj, callback, optAcceptList) Object.observe(thingy, callback, [Thingy.INCREMENT, Thingy.MULTIPLY, Thingy.INCREMENT_AND_MULTIPLY, 'update']); } Thingy.unobserve = function(thingy, callback) { Object.unobserve(thingy); }
      
      







рдЦреИрд░, рдЕрдм рд╣рдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдирдИ рдерд┐рдВрдЧреА рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:



 var thingy = new Thingy(2, 4);
      
      







рд╣рдордиреЗ рдЗрд╕реЗ рдЕрд╡рд▓реЛрдХрди рдХреЗ рддрд╣рдд рд░рдЦрд╛ рдФрд░ рдХрдИ рдмрджрд▓рд╛рд╡ рдХрд┐рдПред рдХреВрд▓, рдХреВрд▓!

 //   thingy (,     "  ") Object.observe(thingy, observer.callback); Thingy.observe(thingy, observer2.callback); //  ,    thingy thingy.increment(3); // { a: 5, b: 7 } thingy.b++; // { a: 5, b: 8 } thingy.multiply(2); // { a: 10, b: 16 } thingy.a++; // { a: 11, b: 16 } thingy.incrementAndMultiply(2, 2); // { a: 26, b: 36 }
      
      











"рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди" рдХреЗ рдЕрдВрджрд░ рд╕рдм рдХреБрдЫ "рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдЬреЛ "рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡" рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд╢реЗрд╖ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рд╢реЗрд╖ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред



рдРрд░реЗ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ



рд╣рдордиреЗ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рд▓реЗрдХрд┐рди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдмрдбрд╝рд╛ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓! рд╡реИрд╕реЗ, рд╣рд░ рдмрд╛рд░ рдЬрдм рд╡реЗ рдореЗрд░реЗ рд▓рд┐рдП "рдорд╣рд╛рди рдкреНрд░рд╢реНрди" рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрднреА рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╕реБрдирддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрддрдиреЗ рдЕрдЪреНрдЫреЗ рд╕рд╡рд╛рд▓ рдкрд░ рдЦреБрдж рдХреЛ рдмрдзрд╛рдИ рджреЗрдиреЗ рдкрд░ рднреА рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд┐рдЪрд▓рд┐рдд рдереЗ :) рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЗ рд╣реИрдВ!



Array.observe()



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

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ notifier.performChange("splice",...)







рдпрд╣рд╛рдБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдо "рд╕рд░рдгреА" рдореЙрдбрд▓ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рддрд░рд╣ рд╣рдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рддреЗ рд╣реИрдВ рдЬрдм рдореЙрдбрд▓ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:



 var model = ['Buy some milk', 'Learn to code', 'Wear some plaid']; var count = 0; Array.observe(model, function(changeRecords) { count++; console.log('Array observe', changeRecords, count); }); model[0] = 'Teach Paul Lewis to code'; model[1] = 'Channel your inner Paul Irish';
      
      









рдЙрддреНрдкрд╛рджрдХрддрд╛



Oo () рдХреА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЧрддрд┐ рдХреЛ рдХреИрд╢реЗ рд░реАрдб рд╕реНрдкреАрдб рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░, рдПрдХ рдХреИрд╢ рдПрдХ рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЬрдм (рдорд╣рддреНрд╡ рдХреЗ рдХреНрд░рдо рдореЗрдВ):



рдК () рдкрд╣рд▓реЗ рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред



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



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



рдЖрдЗрдП рдХреБрдЫ рдирдВрдмрд░реЛрдВ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред



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



рдореБрдЦреНрдп рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдЧрдВрджреА рдЬрд╛рдБрдЪ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИ, рдЬрдмрдХрд┐ рдК () рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИред



рдЧрдВрджреА рдЬрд╛рдБрдЪ






Object.observe ()






рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП Object.observe ()



рдХреНрд░реЛрдо 36 рдмреАрдЯрд╛ рдореЗрдВ рдХреВрд▓, рдУрдУ () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╣рдо рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗред рдСрдмрдЬрд░реНрд╡-рдЬреЗрдПрд╕ рдкреЙрд▓рд┐рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрд▓рдХ рд╣реИ рдЬреЛ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реА рджреЗрд╢реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡рд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЬрд╛рдПред рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╡рд╣ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:



1) рдЖрдк "рдкрде" рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЪрдпрдирд┐рдд рд╡рд╕реНрддреБ рдХреЗ "рдЕрд░реЗ, рдореИрдВ foo.bar.baz" рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЬреИрд╕реЗ рд╣реА рдпрд╣ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдЧреБрдгреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдкрде рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ undefined



ред



рдХрд┐рд╕реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрде рдХреЗ рд╕рд╛рде рдорд╛рди рджреЗрдЦрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 var obj = { foo: { bar: 'baz' } }; var observer = new PathObserver(obj, 'foo.bar'); observer.open(function(newValue, oldValue) { // ,   obj.foo.bar   });
      
      







2) рдпрд╣ рдЖрдкрдХреЛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдмрджрд▓рдирд╛, рдмрдВрдЯрд╡рд╛рд░реЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдкреБрд░рд╛рдиреЗ рд░рд╛рдЬреНрдп рд╕реЗ рдирдП (рдкрд░рд┐рд╡рд░реНрддрд┐рдд) рдПрдХ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред



рд╕рд░рдгреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдРрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдЬреИрд╕реЗ рдХрд┐ рдмреНрдпрд╛рд╣ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ:



 var arr = [0, 1, 2, 4]; var observer = new ArrayObserver(arr); observer.open(function(splices) { //      splices.forEach(function(splice) { splice.index; //  ,    splice.removed; //  ,   ,    splice.addedCount; //  ,    }); });
      
      







рдЪреМрдЦрдЯреЗ рдФрд░ Object.observe ()



рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдХрд╣рд╛ рд╣реИ, рдУрдУ () рдЗрд╕ рдирд╡рд╛рдЪрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреМрдЦрдЯреЗ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рджреЗрддрд╛ рд╣реИред



рдПрдореНрдмрд░ рд╕реЗ рдпреЗрд╣реБрджрд╛ рдХрд╛рдЯреНрдЬрд╝ рдФрд░ рдПрд░рд┐рдХ рдмреНрд░рд┐рди рдиреЗ рдПрдореНрдмрд░ рдХреЗ рдЖрдЧрд╛рдореА рд░реЛрдбрдореИрдк рдореЗрдВ рдУрдУ () рд╕рдорд░реНрдерди рдХреЛ рдордВрдЬреВрд░реА рджреА рд╣реИред рдорд┐рд╕рдХреЛ рд╣рд░реНрд╡реЗ (рдПрдВрдЧреБрд▓рд░ рд╕реЗ) рдиреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рдХреЛрдгреАрдп 2.0 рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ред

рдПрдореНрдмрд░ рд╕реЗ рдпреЗрд╣реБрджрд╛ рдХрд╛рдЯреНрдЬрд╝ рдФрд░ рдПрд░рд┐рдХ рдмреНрд░рд╛рдпрди рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ рдУрдУ () рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдПрдореНрдмрд░ рдХреЗ рдирд┐рдХрдЯ рдЕрд╡рдзрд┐ рдХреЗ рд░реЛрдбрдореИрдк рдореЗрдВ рд╣реИред рдПрдВрдЧреБрд▓рд░ рдХреЗ рдорд┐рд╕реНрдХреЛ рд╣рд░реНрд╡реА рдиреЗ рдПрдВрдЧреБрд▓рд░ 2.0 рдХреЗ рдмреЗрд╣рддрд░ рдмрджрд▓рд╛рд╡ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдбреЙрдХ рд▓рд┐рдЦрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдВрджреЛрд▓рди рдХреА рдЙрдореНрдореАрдж рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрдм рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреНрд░реЛрдо 36 рд╕реНрдерд┐рд░ рдкреИрдХреЗрдЬ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред



рдкрд░рд┐рдгрд╛рдо



рдУрдУ () рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдирд╡рд╛рдЪрд╛рд░ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЖрдЬ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдЬрд┐рд╕рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдирдИ рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реЗрдЧреАред Chrome 36 рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдЧрд╛рдореА рдУрдкреЗрд░рд╛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреАред



рдЦреИрд░, рдЕрдм рдЖрдк рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдХреЛ Object.observe () рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдбреЗрдЯрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рдХрдИ рдореЗрдВ рдЕрджреНрднреБрдд рд╕рдордп рдЖрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ!



рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди:







UPD: "рдмрд╛рдЗрдВрдбрд┐рдВрдЧ" рдХреЛ "рдмрд╛рдЗрдВрдбрд┐рдВрдЧ" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛

UPD 2: рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд░реВрд╕реА

рдпреВрдкреАрдбреА 3 рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛: рд╕рд╣реА рд╡реНрдпрд╛рдХрд░рдг рдФрд░ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрдиреЛрдВ рдХреЛ рд╕рд╣реА рдХрд┐рдпрд╛ред рдзрдиреНрдпрд╡рд╛рдж рдорд┐рдВрдЧреБрди



All Articles