рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореЙрдХрд┐рдВрдЧ рдкреНрд░рд╛рдЗрд╡реЗрдЯ

рд╕рдорд╕реНрдпрд╛


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

рд▓реЗрдХрд┐рди рдЗрд╕ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред

рдЧреАрддрд╛рддреНрдордХ рд╡рд┐рд╖рдпрд╛рдВрддрд░

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

рдирд┐рд░реНрдгрдп


рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд (рдФрд░ рдХрдИ рд╕реЗ рдирдлрд░рдд рд╣реИ) рдлрд╝рдВрдХреНрд╢рди eval() рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ?
рдПрдХ рдЬрдЯрд┐рд▓ рдПрдкреАрдЖрдИ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  this.evalInContext = function (cmd) {eval (cmd);}; 

рдЙрджрд╛рд╣рд░рдг

рдПрдХ рд╡рд╕реНрддреБ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:
 function factory(params){ var outerVar; function outerFunc(){} function MyClass(params2){ var innerVar; function innerFunc(){} this.instanceVar = 0; this.instanceFunc(){} this.evalInContext = function(cmd){eval(cmd);} } return new Myclass(params); } 

рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рд╕рднреА рддрд░реНрдХреЛрдВ, рд╕рд╛рде рд╣реА рдмрд╛рд╣рд░реА, рдЖрдВрддрд░рд┐рдХ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕, рдЬреЛ eval () рдХрд┐рдП рдЧрдП рдХреЛрдб eval () ред

рдХреЗ рдЙрдкрдпреЛрдЧ

 var myObj = factory(); // create an object myObj.evalInContext("outerVar=10;innerVar='zzz';this.instanceVar=new Date();"); //set private and instance variables myObj.evalInContext("innerFunc();outerFunc(111);"); // call functions 

рд╡рд┐рд╕реНрддрд╛рд░


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

рдЬрдЯрд┐рд▓ рдЪрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕реЗрдЯрд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 function setVar(obj, name, value){ obj.evalInContext("name + " = arguments[1]", value); } 

рд╣рдо evalInContext() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП arguments рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧреЗрдЯреНрдЯрд░ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рд╕рд░рд▓ рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
 function getVar(obj, name){ var res = {}; obj.evalInContext("arguments[1]['" + name + "'] = " + name + ";", res); return res[name]; } 

рд╣рдо рд╡рд╛рдкрд╕реА рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдХреЛ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ return рдЙрдкрдпреЛрдЧ eval() рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

UPD : рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдФрд░ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реИред

рд╕рдорд╛рд░реЛрд╣ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди (рдордЬрд╛рдХ)

рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдПрдХ рдЪрд░ рд╣реИ, рд╣рдо рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 function replaceFunction(obj, name, replacement) { var orig = getVar(obj, name); setVar(obj, name, replacement); return orig; } 

рдЬрдЯрд┐рд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓

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

рдиреБрдХрд╕рд╛рди


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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрдВрддрд┐рдо рдХреЛрдб рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рднреА рдХреЛрдб рд╕реБрд░рдХреНрд╖рд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред

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


All Articles