рд▓реЗрдЦ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдПрдХ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рддреН рдПрдХ рдкрд░рд┐рдЪрд┐рдд, рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрдиред рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХ рд╡реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЕрднреА рддрдХ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдУрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
CoffeeScript рдПрдХ рдЫреЛрдЯреА рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдкреНрд░рд▓реЗрдЦрди рдПрдХ рдкреГрд╖реНрда рдкрд░ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ -
coffeescript.org рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░ рднреА рд╕рдВрджреЗрд╣ рдХрд┐рдпрд╛ рдЬрдм "рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ" рдРрд╕рд╛ рдПрдХ рд╢рд╛рдВрдд рд╡рд┐рд╡рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдореИрдВрдиреЗ рдЬреЛрд░ рджрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ред
рдкрд░рд┐рдЪрдп
рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдЗрддрд┐рд╣рд╛рд╕ рдЦреЛрджрддреЗ рд╣реИрдВ, рддреЛ 2009 рдХреЗ рдмрд╛рдж рд╕реЗ, рд░реВрдмреА рдореЗрдВ рднрд╛рд╖рд╛ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, 2010 рдХреЗ рдмрд╛рдж рд╕реЗ - рдпрд╣ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдФрд░ рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 3.1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рдЗрд╕рдиреЗ "рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд" рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ред
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, CoffeeScript рдХреЗрд╡рд▓ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдЪреАрдиреА рд╣реИред рддреЛ, рдЗрд╕рдХрд╛ рдореВрд▓реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдкрдврд╝реЗрдВ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ), рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрднреА рднреА рдЦрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЬрд┐рд╕рдореЗрдВ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЕрдкрдирд╛рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдмрд╛рдд рдХрд░реЗрдВ, рддреЛ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЙрдиреНрдирдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдЬреНрдЬреНрд╡рд▓ рднрд╡рд┐рд╖реНрдп рдЬрд▓реНрдж рд╣реА рдЖрдПрдЧрд╛ред рдФрд░ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдм рдЖрдкрдХреЛ рддрдХрдиреАрдХреА рдкреНрд░рдЧрддрд┐ рдХреЗ рдлрд▓ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЗрд╕ рдирд╕ рдореЗрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд░реНрде рдореЗрдВ, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рднрд╛рд╖рд╛ рдХреА рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реБрдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реБрдкрд░рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╣рдж рддрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╡рд╣ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рд▓реЗрдХрд┐рди рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдпрд╣ рдлрд╛рдпрджрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрдХреВрд▓рддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдХреЛ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рддреЛ, рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╖рдп рдкрд░ рд╡рд╛рдкрд╕ред
рдХреЛрдб рдЕрдиреБрд╡рд╛рдж
рдареАрдХ рд╣реИ, рдЕрдкрдиреЗ CoffeeScript рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдиреЛрдб.рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ:
npm install -g coffee-script
рд╣рдо рджреЛ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ
lib
рдФрд░
src
рдирд╛рдо рджреЗрдВрдЧреЗред
src/helloWorld.coffee
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ рдФрд░ CoffeeScript рдкрд░ рдХреБрдЫ рд▓рд┐рдЦреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
console.log('Hello world')
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЕрдиреБрд╡рд╛рджрдХ рдХреЛ рдЪрд▓рд╛рдПрдБ:
coffee --compile --output lib/ src/
рдирддреАрдЬрддрди,
helloWorld.js
рдлрд╝рд╛рдЗрд▓, рдирд┐рд╖реНрдкрд╛рджрди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрдЧреАред
рдмреЗрд╢рдХ, рд╕рднреА рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрдХ рдЪрд▓рд╛рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдЯреАрдо рд▓реЙрдиреНрдЪ
coffee -o lib/ -cw src/
рдЖрдкрдХреЛ
src
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред
рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕
рдХрд╛рд░реНрдпреЛрдВ
рднрд╛рд╖рд╛ рдкрд░ рд╣реА рдЪрд▓рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
square = (x) -> x * x cube = (x) -> square(x) * x
рдЗрд╕рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорддреБрд▓реНрдп:
(function() { var cube, square; square = function(x) { return x * x; }; cube = function(x) { return square(x) * x; }; }).call(this);
рдпрд╣рд╛рдВ рд╣рдо рджреЛ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХреНрд░рдорд╢рдГ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╡рд░реНрдЧ рдФрд░ рдШрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рдХреЛрдб рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рддреБрд░рдВрдд рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рддрдХрдиреАрдХ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдмрд┐рдирд╛ рдЗрд╕ рдЪрд┐рдВрддрд╛ рдХреЗ рдХрд┐ рд╡реЗ рд╡реИрд╢реНрд╡рд┐рдХ рджрд╛рдпрд░реЗ рдХреЛ рд░реЛрдХреЗрдВрдЧреЗред рд▓реЗрдЦ рдХреЗ рдиреАрдЪреЗ рд╣рдо рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдЕрдЧрд▓рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЪрд░
var cube, square
рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рдПрдХ рдЪрд░, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддреА рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╡реИрд╢реНрд╡рд┐рдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ
var
рдШреЛрд╖рдгрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдПред
рдПрд░реЛ
->
рд╢рдмреНрдж
function
рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд
function
ред
рдФрд░ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╢рдмреНрдж
return
рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрдВрддрд┐рдо рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди
CoffeeScript рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрджрд╛рд╣рд░рдг:
fill = (container, liquid = "coffee") -> "Filling the #{container} with #{liquid}..."
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдордХрдХреНрд╖:
var fill; fill = function(container, liquid) { if (liquid == null) { liquid = "coffee"; } return "Filling the " + container + " with " + liquid + "..."; };
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
null
рдпрд╛
undefined
рд▓рд┐рдП
liquid
рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрд▓рддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╡рд┐рд╡рд░рдг рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдВрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рд╣реИред
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬ рдкрд░ Iterate рдХрд░реЗрдВ
рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ annoys рд╣реИ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реИред
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕рдХреЗ рдЕрдкрдиреЗ рдЧреБрдг рдмреНрдпрд╛рдЬ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рди рдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдЧреБрдгред
рдФрд░ рд╣рд░ рдмрд╛рд░ рдФрд░ рдЗрд╕рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд
hasOwnProperty
рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ
hasOwnProperty
рдЬрд╛рдБрдЪ рдХрд░рддрд╛
hasOwnProperty
ред
JQuery.each () рдХреА рд╢реИрд▓реА рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкреБрд░рд╛рдиреЗ рд╕рдордп рдХреЗ
for
рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдореЗрдВ рд╣реАрди рд╣реИред
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдардВрдбрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП:
yearsOld = max: 10, ida: 9, tim: 11 for own child, age of yearsOld console.log "#{child} is #{age}"
рдХреЗ рдмрд░рд╛рдмрд░:
var age, child, __hasProp = {}.hasOwnProperty; for (child in yearsOld) { if (!__hasProp.call(yearsOld, child)) continue; age = yearsOld[child]; console.log("" + child + " is " + age); }
рдЕрдЪреНрдЫреА рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, == рдСрдкрд░реЗрдЯрд░ рдорд╛рдореВрд▓реА рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ === рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, CoffeeScript рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬрд╛рд▓ рд╕реЗ рдиреМрд╕рд┐рдЦрд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП == рдСрдкрд░реЗрдЯрд░ рдХреЛ === рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдорд╛рдорд▓рд╛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм == рдСрдкрд░реЗрдЯрд░ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реИред рдпрд╣
null
рд╕рд╛рде рдПрдХ рддреБрд▓рдирд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЧрд┐рд░ рдЧрдП рдЭрдкрдЯреНрдЯрд╛
undefined
null
рдФрд░
undefined
рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ CoffeeScript рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдСрдкрд░реЗрдЯрд░ рд╣реИ
?
ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
alert "I knew it!" if elvis?
рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░:
if (typeof elvis !== "undefined" && elvis !== null) { alert("I knew it!"); }
рдХрдХреНрд╖рд╛рдПрдВ
рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╣реЗрдВрдЧреЗред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class Animal constructor: (@name) -> move: (meters) -> alert @name + " moved #{meters}m." class Snake extends Animal move: -> alert "Slithering..." super 5 class Horse extends Animal move: -> alert "Galloping..." super 45 sam = new Snake "Sammy the Python" tom = new Horse "Tommy the Palomino" sam.move() tom.move()
рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рднреА, рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдмреЗрд╕ рдХреНрд▓рд╛рд╕
Animal
рдФрд░ рдЙрд╕рдХреЗ рджреЛ рд╡рд╛рд░рд┐рд╕реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
Snake
рдФрд░
Horse
ред
рдЖрдЗрдП
Animal
рд╡рд░реНрдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдирд┐рд░реНрдорд╛рдг рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ
@name
рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрд╢реБрд▓рд┐рдкрд┐ рд╣реИ рдЬреЛ рдирд╛рдо рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдореЗрдВ рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рддреА рд╣реИред рдЪрд╛рд▓ рд╡рд┐рдзрд┐ рдореЗрдВ, рдЗрд╕ рдХреЗ рд▓рд┐рдП
@name
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЫреЛрдЯрд╛ рд╣реИред
рдЙрдкрд╡рд░реНрдЧреЛрдВ рдореЗрдВ
move
рддрд░реАрдХреЛрдВ рдореЗрдВ,
super
рдЙрд╕реА рдирд╛рдо рдХреА рдореВрд▓ рд╡рд┐рдзрд┐ рдХрд╣рд▓рд╛рддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рдПрдХ рдмрдЪреНрдЪреЗ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдХрднреА-рдХрднреА рдХреЗрд╡рд▓ рдЙрд╕реА рдирд╛рдо рдХреА рдореВрд▓ рдХрдХреНрд╖рд╛ рдкрджреНрдзрддрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЗ рднреА рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рдореИрдВ рдирд╖реНрдЯ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ js- рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗред
var Animal, Horse, Snake, sam, tom, _ref, _ref1, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; Animal = (function() { function Animal(name) { this.name = name; } Animal.prototype.move = function(meters) { return alert(this.name + (" moved " + meters + "m.")); }; return Animal; })(); Snake = (function(_super) { __extends(Snake, _super); function Snake() { _ref = Snake.__super__.constructor.apply(this, arguments); return _ref; } Snake.prototype.move = function() { alert("Slithering..."); return Snake.__super__.move.call(this, 5); }; return Snake; })(Animal); Horse = (function(_super) { __extends(Horse, _super); function Horse() { _ref1 = Horse.__super__.constructor.apply(this, arguments); return _ref1; } Horse.prototype.move = function() { alert("Galloping..."); return Horse.__super__.move.call(this, 45); }; return Horse; })(Animal); sam = new Snake("Sammy the Python"); tom = new Horse("Tommy the Palomino"); sam.move(); tom.move();
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреНрд▓рд╛рд╕рд┐рдХ
extend
рдлрд╝рдВрдХреНрд╢рди рдХреА рднрд┐рдиреНрдирддрд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдмреЗрд╢рдХ, рдЬрдм рдЕрдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдлреИрдВрд╕реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣рдореЗрд╢рд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдВрджрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдФрд░
extend
рд╕рдорд╛рд░реЛрд╣ рдХрдИ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ
javascript.ru/tutorial/object/inheritance#nasledovanie-na-klassah-funkciya-extend ред
рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛
рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдирджрдВрдб рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреА рджрдХреНрд╖рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИ, рдореБрдЭреЗ рдХреЛрдИ рдмрдХрд╡рд╛рд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рд╡рд░реНрдЧ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рднреА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рднреА рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реБрдИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рднреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
class Foo bar: 10
рдЙрддреНрдкрд╛рджрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
var Foo; Foo = (function() { function Foo() {} Foo.prototype.bar = 10; return Foo; })();
рдпрд╣рд╛рдБ, рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреА рддрдерд╛рдХрдерд┐рдд рд╡рд┐рд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИред
рдЬрдм рддрдХ рд╣рдореЗрдВ рдЗрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдореЛрд░реА рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ:
obj = new Foo() obj.bar = 500
рдпрд╣ рдУрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡реНрдпрдХреНрддрд┐рдЧрдд
bar
рдкреНрд░реЙрдкрд░реНрдЯреА рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдУрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреА
bar
рд╕рдВрдкрддреНрддрд┐ рдЕрднреА рднреА 10 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд╕рдм рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдкреНрд░рднрд╛рд╡реА рд╣реИред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХрдорд╛рддреНрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдореМрдЬреВрдж рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣ рдореБрдлреНрдд рдореЗрдВ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдзреБрдирд┐рдХ рдЗрдВрдЬрдиреЛрдВ рдкрд░, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реНрдореГрддрд┐ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрдЯреНрдЯрд░рдкрдВрдереА рдЕрдиреБрдХреВрд▓рди рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл, рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ рдЖрдИрдИрдПрд╕, рдЬрд┐рд╕рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдорд╣рд╕реВрд╕ рдХреА рдЧрдИ рдереА, рдзреАрд░реЗ-рдзреАрд░реЗ рдЧреБрдордирд╛рдореА рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рд░рд╣реЗ рд╣реИрдВред
рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛
рдПрдХ рдФрд░ рд╢рд╛рдВрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рдирд┐рдпреБрдХреНрддрд┐ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
Account = (customer, cart) -> @customer = customer @cart = cart $('.shopping_cart').bind 'click', (event) => @customer.purchase @cart
рдЬрд╛рд░реА рдХрд░рдирд╛:
var Account; Account = function(customer, cart) { var _this = this; this.customer = customer; this.cart = cart; return $('.shopping_cart').bind('click', function(event) { return _this.customer.purchase(_this.cart); }); };
рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрдо рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред CoffeeScript рдореЗрдВ, рдЗрд╕ рдмреИрд╕рд╛рдЦреА рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
->
, рд▓реЗрдХрд┐рди
=>
ред рдЙрд╕рдХреЗ рдмрд╛рдж,
this
рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░ рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдЧрд╛ред
рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХрддрд╛
рдпрджрд┐ рдЖрдкрдХреЛ рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реИ:
hi = `function() { return [document.title, "Hello JavaScript"].join(": "); }`
рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
var hi; hi = function() { return [document.title, "Hello JavaScript"].join(": "); };
рд╕рд░рдгрд┐рдпреЛрдВ
рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЪрд┐рдкреНрд╕ рд╣реИрдВред рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо 1 рд╕реЗ 5 рддрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХреНрдпреВрдмреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
CoffeeScript рдореЗрдВ, рдмрд╕ рд▓рд┐рдЦреЗрдВ:
cubes = (Math.pow(num, 3) for num in [1..5])
рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:
var cubes, num; cubes = (function() { var _i, _results; _results = []; for (num = _i = 1; _i <= 5; num = ++_i) { _results.push(Math.pow(num, 3)); } return _results; })();
рдирд┐рд╖реНрдХрд░реНрд╖
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдбреЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛
coffeescript.org рдкрд░ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖:
- рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдХреЛрдб рдХреЗ рдЖрдЧреЗ рд╕рдорд░реНрдерди рджреЛрдиреЛрдВ рдХреЛ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рдХрд░рддрд╛ рд╣реИред
- рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ (рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдореЗрдВ рдореБрдЭреЗ рдХреБрдЫ рджрд┐рди рд▓рдЧреЗ)ред
- WebStorm рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд░реНрдерди (рдЕрдиреНрдп рдЖрдИрдбреАрдИ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдирдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛)
- рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп
- рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдХрдИ рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред
рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рддрдм рдпрд╣ рдЕрдореВрд░реНрдд рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд┐рдЧреНрдз рдкрд░рдд рд╕реЗ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЙрдкрдХрд░рдг рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред