Underscore: _.wrap рддрд░реНрдХ рдХреЗ рд╕рд╛рде рд░реИрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдорд╛рд░реНрдЪ 2013  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jashkenas/underscore

рдЖрдЬ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдФрд░ рдмреИрдХрдмреЛрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдореБрдЭреЗ рдХреБрдЫ рдлрдВрдХреНрд╢рди рд▓рдкреЗрдЯрдиреЗ рдкрдбрд╝реЗред рдореИрдВрдиреЗ underscorejs.org рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛:

рд╡рд░ рд╣реИрд▓реЛ = рдлрд╝рдВрдХреНрд╢рди (рдирд╛рдо) {рд╡рд╛рдкрд╕реА "рд╣реИрд▓реЛ:" + рдирд╛рдо; };
рд╣реИрд▓реЛ = _.wrap (рд╣реИрд▓реЛ, рдлрд╝рдВрдХреНрд╢рди (func) {
рд╡рд╛рдкрд╕реА "рдкрд╣рд▓реЗ," + func ("рдореЛ") + ", рдХреЗ рдмрд╛рдж";
});
рдирдорд╕реНрддреЗ();
=> 'рдкрд╣рд▓реЗ, рдирдорд╕реНрддреЗ: рдореЛ, рдмрд╛рдж рдореЗрдВ'

рджреВрд╕рд░реА рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдкрд░
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд╕рдВрдж рд╣реИ
рд╣реИрд▓реЛ ("рдЙрдорд░");
рдореЗрд░реЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рддрд░реНрдХ рдмрд╛рд╣рд░ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВред

рд╕рднреА 8 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

var greet = function(name, language){
  var response
  if (language === "sp") {
    response = "Hola"
  } else if (language === "fr") {
    response = "Bonjour"
  } else {
    response = "Hello"
  }
  return response + " " + name
}
greet("Ted", "fr"); // => "Bonjour Ted"
greet = _.wrap(greet, function(old_greet, lang){ return old_greet("Ted", lang); } );
greet("sp"); // => "Hola Ted"

рдЗрд╕ рддреНрд╡рд░рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдерд╛ред
рдореИрдВ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рдРрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реАрдврд╝ рдХреА рд╣рдбреНрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рджреЗрдЦреЗрдВ.рдЬреЗрдПрд╕
рд╡рд░ рд╡реНрдпреВ = рдмреИрдХрдмреЛрди.рд╡реНрдпреВ.рдПрдХреНрд╕рдЯреЗрдВрдб ({

рдСрдерд░рд╛рдЗрдЬрд╝рдХреНрд░рд┐рдПрдЯрдПрдХреНрд╢рди: рдлрдВрдХреНрд╢рди (){
// рдпрд╣рд╛рдБ "рдпрд╣" рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ
this.createAlert: _.wrap(this.createAlert, function(_createAlert, _type){
// рдХрд╛рд░реНрд░рд╡рд╛рдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ
рд╡рд╛рдкрд╕реА _createAlert (_ рдкреНрд░рдХрд╛рд░);
});
},
createAlert: рдлрд╝рдВрдХреНрд╢рди (рдкреНрд░рдХрд╛рд░) {
//рд╕рдВрдХрдЯ:
// рдпрд╣рд╛рдВ "рдпрд╣" [рд╡рд┐рдВрдбреЛ рдЧреНрд▓реЛрдмрд▓] рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ
}
});
createAlert рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗрдВ рдЬрдм рдореИрдВ createAlert рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рддреЛ рдпрд╣ [рд╡рд┐рдВрдбреЛ рдЧреНрд▓реЛрдмрд▓] рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рд▓рдЧрд╛ред
рдореИрдВ "рджреГрд╢реНрдп" рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ

рдореИрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдкреНрд░рд╢реНрди рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВред
BTW рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрдорд╛рд▓ рдХрд╛ рд╣реИ

рдЖрдкрдХреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде _createAlert рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреА рдорджрдж рд╣реЛрдЧреАред :)

return _createAlert.call(this, _type);

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ _wrap рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

рдПрдлрдПрди = (рдлрд╝рдВрдХреНрд╢рди (рдПрдлрдПрди, рдкрд╣рд▓реЗ, рдмрд╛рдж рдореЗрдВ, рд╕реНрд╡рдпрдВ) {
рд╡рд╛рдкрд╕реА рд╕рдорд╛рд░реЛрд╣ () {
рдЕрдЧрд░ (рдкрд╣рд▓реЗ) рдкрд╣рд▓реЗред рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рд╕реНрд╡рдпрдВ, рддрд░реНрдХ);
рд╡рд░ рд░реЗрд╕ = fn.apply (рд╕реНрд╡рдпрдВ, рддрд░реНрдХ);
рдЕрдЧрд░ (рдмрд╛рдж рдореЗрдВ) рдмрд╛рдж рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ (рд╕реНрд╡рдпрдВ, рддрд░реНрдХ);
рд╡рд╛рдкрд╕реА рд░реЗрд╕;
}
})(fn, рдкрд╣рд▓реЗ, рдмрд╛рдж рдореЗрдВ, рдпрд╣)

рдЖрдк рдЙрд╕ zarehb . рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

tnx megawac, рдЖрдВрд╢рд┐рдХ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЛ рдкреВрд░реНрд╡-рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╣реИ

рд░реИрдк _.partial fyi . рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

fn = _.partial(function(fn, before, after, self) {
    var args = _.rest(arguments, 4);
    if (before) before.apply(self,args);
    var res = fn.apply(self,args);
    if (after) after.apply(self,args);
    return res;
})(fn, before, after, this )

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

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jezen picture jezen  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

clouddueling picture clouddueling  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arypbatista picture arypbatista  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

marcalj picture marcalj  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zackschuster picture zackschuster  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ