Quick guide to somewhat advanced JavaScript
tour of some OO features
Hey, I didn't know you could do that
¿©·¯ºÐÀÌ °³¹ßÀÚÀÌ°í ³ª¿Í °°Àº ±æÀ» °É¾î ¿Ô´Ù¸é, À¥ÆäÀÌÁö¿¡¼ ²Ï ¸¹Àº Javascript Á¶°¢µéÀ» »ç¿ëÇØ ¿ÔÀ» °ÍÀÌ´Ù. ¸¶Ä¡ UIÀÇ µüÇ® ¸¶³É..
ÃÖ±Ù±îÁö ³ª´Â Javascript°¡ ³»°¡ Ãë¾÷ ÇßÀ» ¶§º¸´Ù ´õ °´Ã¼ÁöÇâ(OO_ ´É·ÂÀ» °¡Á³´Ù°í´Â ÇÏÁö¸¸ ³ º°·Î ±×°ÍÀ» »ç¿ëÇØ¾ßÇÏ´Â ´À³¦Àº ¹ÞÁö ¸øÇß´Ù. ºê¶ó¿ìÁ®µéÀÌ Javascript¿Í DOMÀÇ Á»´õ Ç¥ÁØÈµÈ Çü»óÀ» Áö¿øÇϱ⠽ÃÀÛÇÔ¿¡ µû¶ó, client »ó¿¡¼ ±¸µ¿Çϱâ À§ÇÑ ´õ º¹ÀâÇÏ°í ±â´ÉÀûÀÎ Äڵ带 ÀÛ¼ºÇÏ °ÍÀÌ °¡´ÉÇØÁ³´Ù. ±×°ÍÀº AJAX »ç»ó(ÞÀßÚ)À» ź»ýÇϵµ·Ï µµ¿Ô´Ù.
¿ì¸® ¸ðµÎ°¡ AJAX ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé±âÀ§ÇØ Äڵ带 ÀÛ¼ºÇÏ´Â °ÍÀ» °ÍÀ» ¹è¿ï ÁîÀ½Çؼ, ¿ì¸®°¡ ¾Ë°íÀÖ¾ú´ø Javascript´Â Á¤¸» ºù»êÀÇ Àϰ¢¿¡ ºÒ°úÇß´Ù. ÀÚ, ÀÌÁ¦ ¿ì¸®´Â ÀԷ°ª °Ë»ç¿Í ÇÏÂúÀº ¾÷¹«µé°ú °°Àº °£´ÜÇÑ UI Çãµå·¿ÀϵéÀ» ³Ñ¾î¼ »ç¿ëµÇ°í ÀÖ´Â JavascriptÀ» »ìÆì º¼ °ÍÀÌ´Ù. ¿äÁò, client »óÀÇ ÄÚµå´Â Á¡Á¡ ´õ Áøº¸ÀûÀÌ°í °èÃþȵǸç, ´õ ¸¹ÀÌ ½ÇÁ¦ µ¥½ºÅ©Å¾ ¾ÖÇø®ÄÉÀÌ¼Ç ¶Ç´Â c/sȯ°æÀÇ ¹«°Å¿î client ó·³ µÇ¾î °¡°í ÀÖ´Ù. ¿ì¸®´Â class library, object model, hierarchy, pattern µé ±×¸®°í ´ÜÁö ¿ì¸®ÀÇ server ÂÊ Äڵ忡¼ ´«¿¡ À;ú´ø ´Ù¸¥ ¸¹Àº °ÍµéÀ» ¾Ë¾Æ º¼ °ÍÀÌ´Ù.
¿©·¯°¡Áö¸é¿¡¼ ¿ì¸®´Â °©ÀÛ½º·¹ ȸéÀÇ bar¸¦ Àüº¸´Ù ÈξÀ ³ô°Ô ³õ´Â°Í¿¡ ´ëÇØ ¾ê±â ÇÒ¼ö ÀÖ´Ù. »õ·Î¿î WEBÀ» À§ÇØ ¾ÖÇø®ÄÉÀ̼ǵéÀ» ÀÛ¼ºÇϱâ À§Çؼ´Â ÈξÀ °µµ³ôÀº ±â¼úÀÇ ¼÷´ÞÀ» ÇÊ¿ä·Î ÇÑ´Ù. ±×¸®°í ¿ì¸®´Â ÀÌ ¸ñÀûÀ» ÀÌ·ç±â À§Çؼ ¿ì¸® ÀÚ½ÅÀÇ Javascript ±â¼úµéÀ» Çâ»ó½ÃÄѾ߸¸ ÇÑ´Ù. ¸¸ÀÏ ¿ÜºÎ¿¡ Á¸ÀçÇÏ´Â ¸¹Àº javascript library¸¦ »ç¿ëÇϱ⸦ ½ÃµµÇÑ´Ù¸é, Prototype.js, Scriptaculous, moo.fx, Behaviour, YUI, µîµî ó·³, ¿©·¯ºÐÀº °á±¹ ±× JS code¸¦ ¿©·¯ºÐ ½º½º·Î ÆÇµ¶Çؼ ¾Ë¾Æ¾ß ÇÒ°ÍÀÌ´Ù. ¾Æ¸¶ ¿©·¯ºÐÀº ¶óÀ̺귯¸®µéÀÌ ±×°ÍÀ» ±¸ÇöÇÏ´Â ¹æ¹ýÀ» ¹è¿ì±â ¿øÇϰųª ¾Ë±â ¿øÇϰųª ÇØ¼, ¶Ç´Â ¶óÀ̺귯¸®°¡ »ç¿ë¹ýÀ» ÀÌÇØÇϱâ À§ÇÑ À¯ÀÏÇÑ ¹æ¹ýÀ̰ųª ÇØ¼, ¹®¼°¡ ´ëºÎºÐÀÇ ¶óÀ̺귯¸®µé°ú °ü·ÃµÇ¾î ÀÖ¾î º¸ÀÌÁö ¾Ê°Å³ª ÇØ¼..( Maybe because you want to learn how they do it, or because you're curious, or more often because that's the only way to figure out how to use it, since documentation does not seem to be highly regarded with most of these libraries. ¾Æ¸¶µµ ÀÌÀ¯ÀÎÁï ±×°ÍµéÀÌ ¾î¶»°Ô µ¿ÀÛÇÏÁö ¹è¿ì°í ½Í±â ¶§¹®À̰ųª, È£±â½É ¶§¹®À̰ųª, Á¾Á¾ ÀÌ ¶óÀ̺귯¸®µéÀÇ ´ëºÎºÐÀÌ ¹®¼È°¡ ´ú µÇ¾îÀֱ⠶§¹®¿¡, »ç¿ë¹ýÀ» ¾Ë±â À§ÇÑ À¯ÀÏÇÑ ¹æ¹ýÀÌ ±×°Í¹Û¿¡ ¾ø±â ¶§¹®ÀÏ °ÍÀÌ´Ù. ) ±× ¹Û¿¡ ¹«¾ùÀ̵çÁö ±× °æ¿ì¿¡ ÀÖ¾î¼, Àü¿¡ ±×°Í°ú °°Àº ¾î¶°ÇÑ °ÍµéÀ» º»ÀûÀÌ ¾ø´Ù¸é ¿©·¯ºÐÀº ³¸¼³°í µÎ·Á¿î »óȲ¿¡ Á÷¸éÇÏ°Ô µÉ °ÍÀÌ´Ù.
ÀÌ ±ÛÀÇ ¸ñÀûÀº ¾ÆÁ÷ Àͼ÷ÇÏÁö ¾ÊÀº »ý¼ºÀÚµéÀÇ Å¸ÀÔµéÀ» ²Ä²ÄÈ÷ ¼³¸íÇÔ¿¡ ÀÖ´Ù.
Related article
Prototype.js documentation
JSON
JavaScript Object Notation (JSON,)Àº AJAX Å׸¶¿Í °ü·ÃÇÏ¿© °©ÀÚ±â ¶á »õ·Î¿î ±â¼ú ¿ë¾î Áß ÇϳªÀÌ´Ù. JSONÀº javascript¿¡¼ ¼±¾ðÀû objectÀÇ ÇϳªÀÇ ¹æ½ÄÀÌ´Ù. ÀÌÁ¦ ¹Ù·Î ¿¹Á¦¸¦ º¸°í ¾î¶»°Ô ó¸®ÇÏ´ÂÁö º¸µµ·Ï ÇÏÀÚ.
var myPet = { color: 'black', leg_count: 4, communicate: function(repeatCount){
for(i=0;i<repeatCount;i++) alert('Woof!');} };
ÀÚ, ¼Ò½º Æ÷¸ËÀ» ¾à°£ Ãß°¡ ÇØ¼ ¾Ë¾Æ º¸±â ½±°Ô º¸µµ·Ï ÇÏÀÚ:
var myPet = {
color: 'black',
legCount: 4,
communicate: function(repeatCount){
for(i=0;i<repeatCount;i++)
alert('Woof!');
}
};
¿©±â¼ ¿ì¸®´Â µÎ°³ÀÇ ¼Ó¼ºµé(color °ú legCount)°ú ¸Þ¼µå(communicate)¸¦ ÀÌ¿ëÇÏ¿© object ÂüÁ¶¸¦ ¸¸µé¾ú´Ù. ÄÞ¸¶·Î ±¸ºÐµÈ ¸®½ºÆ®·Î¼ objectÀÇ ¼Ó¼ºµé°ú ¸Þ¼ÒµåµéÀ» Á¤ÀǵǾîÀִ°ÍÀ» ÀÌÇØÇϴ°ÍÀº ¾î·ÆÁö ¾ÊÀº ÀÏÀÌ´Ù. °¢ ±¸¼ºµéÀ» nameÀ¸·Î Á¤ÀÇµÇ¾î º¸¿©Áö¸ç colon(:) µû¶ó¿À¼ ±× ´ÙÀ½À¸·Î Á¤ÀǺΠÀÌ´Ù. ¼Ó¼ºÀÇ °æ¿ì¿¡¼´Â ´ÜÁö °ªÀ¸·Î Á¤ÀǺθ¦ ä¿î´Ù. À͸í ÇÔ¼ö(anonymous function)À» ÇÒ´çÀ¸·Î ¸Þ¼ÒµåµéÀ» ¸¸µç´Ù. ÀÌ´Â ´ÙÀ½ ¾Æ·¡ ÁÙ¿¡¼ ´õ ÀÚ¼¼È÷ ¼³¸íÇÒ °ÍÀÌ´Ù. object¸¦ ¸¸µç ÈÄ¿¡ myPet º¯¼ö¿¡ ÇÒ´çÇϸç, ¿ì¸®´Â ´ÙÀ½°ú °°ÀÌ ÀÌ º¯¼ö¸¦ »ç¿ë ÇÒ¼ö ÀÖ´Ù:
alert('my pet is ' + myPet.color);
alert('my pet has ' + myPet.legCount + ' legs');
//if you are a dog, bark three times:
myPet.communicate(3);
¿©·¯ºÐÀº ¿äÁò JS¿¡¼ µµÃ³¿¡ »ç¿ëµÇ¾îÁø JSONÀ» º¼ °ÍÀÌ´Ù. ÇÔ¼öµé¿¡ Àμö, ¸®ÅÏ °ªµé, ¼¹öÀÇ ÀÀ´äµé(stringµé ¿¡¼) etc.
What do you mean? A function is an object too?
ÀÌ´Â À§ Áú¹®¿¡ ´ëÇØ »ý°¢ÇØ º»Àû ¾ø´Â °³¹ßÀڵ鿡°Ô´Â Á» »ý¼Ò ÇÒ °ÍÀÌÁö¸¸ JS¿¡¼ ÇÔ¼ö(function) ¶ÇÇÑ objectÀÌ´Ù. ¿¹¸¦ µé¾î, stringÀ» ó¸®ÇÏ´Â ´Ù¸¥ ÇÔ¼ö¿¡ ÀÎÀڷμ ÇÔ¼ö¸¦ ó¸® ÇÒ ¼ö ÀÖ´Ù. ÀÌ´Â ±¤¹üÀ§ÇÏ°Ô »ç¿ëµÇ¾îÁö°í ¸Å¿ì À¯¿ëÇÏ´Ù.
ÀÌ ¿¹Á¦¸¦ º¸µµ·Ï ÇÏÀÚ. ¿ì¸®´Â ´Ù¸¥ ÇÔ¼ö(annoyThePet)¿¡ ÇÔ¼öµé(myDog.bark, myCat.meow)À» ÀÎÀÚ·Î ÁÖ¾î ÁÙ °ÍÀÌ´Ù. annoyThePet function¿¡¼ ÀÎÀÚ·Î ÁÖ¾îÁø functionÀ» »ç¿ë ÇÒ °ÍÀÌ´Ù.
var myDog = {
bark: function(){
alert('Woof!');
}
};
var myCat = {
meow: function(){
alert('I am a lazy cat. I will not meow for you.');
}
};
function annoyThePet(petFunction){
//let's see what the pet can do
petFunction();
}
//annoy the dog:
annoyThePet(myDog.bark);
//annoy the cat:
annoyThePet(myCat.meow);
¿ì¸®°¡ myDog.bark °ú myCat.meow¿¡ Ãß°¡µµ´Ï °ýÈ£ "()" ¾øÀÌ ÀÎÀÚ·Î »ç¿ëÇÑ °Í¿¡ ´ëÇÏ¿© ÁÖ¸ñ ÇØ¾ß ÇÑ´Ù. ¸¸ÀÏ ¿ì¸®°¡ Àμö·Î ³Ñ±ä functionÀÌ Á¸Àç ÇÏÁö ¾Ê°Å³ª method¸¦ È£ÃâÇϰí return value¸¦ Àμö·Î ³Ñ±ä´Ù¸é, µÎ °æ¿ì¿¡ ´ëÇØ undefined¸¦ º¸ÀÏ °ÍÀÌ´Ù.
¿©·¯ºÐÀÌ ³ªÀÇ °ÔÀ¸¸¥ °í¾çÀ̰¡ °³ ó·³ ¢°Ô ¸¸µé±â ¿øÇÑ´Ù¸é, ¿©·¯ºÐÀº ÀÌó·³ ½±°Ô ÇÒ ¼ö ÀÖ´Ù:
myCat.meow = myDog.bark; myCat.meow(); //alerts 'Woof!'
Arrays, items, and object members
´ÙÀ½ JS¾È¿¡ µÎ ÁÙÀº °°Àº ÀÏÀ» ÇÑ´Ù.
var a = new Array(); var b = [];
³ª´Â ¿©·¯ºÐÀÌ ÀÌ¹Ì ¾Ë°í ÀÖ´Â ´ë·Î, ¿©·¯ºÐÀº »ç°¢ °ýÈ£¸¦ »ç¿ëÇÏ¿© array¾ÈÀÇ °¢°¢ÀÇ ¾ÆÀÌÅÛµéÀ» Á¢±Ù ÇÒ ¼ö ÀÖ´Ù:
var a = ['first', 'second', 'third']; var v1 = a[0]; var v2 = a[1]; var v3 = a[2];
ÇÏÁö¸¸ ¿©·¯ºÐµéÀ» ¼ýÀÚ »öÀÎÀ¸·Î¸¸ Á¢±Ù Á¦ÇÑÇÏÁö ¾Ê´Â´Ù. ¿©·¯ºÐÀº stringÀ¸·Î ¸â¹öÀÇ À̸§À» »ç¿ëÇÏ¿© JS object °¢ ¸â¹öµéÀ» Á¢±Ù ÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ºó object¸¦ ¸¸µé°í nameÀ¸·Î¼ ¾î¶² ¸â¹öµéÀ» Ãß°¡ÇÑ´Ù.
var obj = {}; //new, empty object
obj['member_1'] = 'this is the member value';
obj['flag_2'] = false;
obj['some_function'] = function(){ /* do something */};
À§ÀÇ ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ µ¿ÀÏÇÑ È¿°ú¸¦ °¡Áø´Ù:
var obj = {
member_1:'this is the member value',
flag_2: false,
some_function: function(){ /* do something */}
};
´Ù¾çÇÑ ¹æ¹ýÀ¸·Î, JS¿¡¼ objectµéÀÇ »ç»ó°ú ¿¬°ü arraray(hashes)µéÀº ±¸º° ÇÏÁö ¾Ê´Â´Ù. ´ÙÀ½ µÎ ÁÙ ¿ª½Ã °°Àº ÀÏÀ» ÇÑ´Ù.
obj.some_function(); obj['some_function']();
Enough about objects, may I have a class now?
OOP ÇÁ·Î±×·¡¹Ö ¾ð¾îµéÀÇ °·ÂÇÑ ÈûÀº classµéÀÇ »ç¿ë¿¡¼ ³ª¿Â´Ù. JS¿¡¼ ³ª´Â ¾î¶»°Ô classµéÀ» Á¤ÀÇÇÏ´ÂÁö ³ªÀÇ ÀÌÀü °æÇèÀ¸·Î ºñÃ纼¶§ ÁüÀÛÃÊÂ÷ ÇÏ±â ¾î·Æ´Ù. Á÷Á¢ ÆÇ´ÜÇϽÿÀ.
//defining a new class called Pet
var Pet = function(petName, age){
this.name = petName;
this.age = age;
};
//let's create an object of the Pet class
var famousDog = new Pet('Santa\'s Little Helper', 15);
alert('This pet is called ' + famousDog.name);
¿ì¸®ÀÇ Pet class¿¡ method¸¦ Ãß°¡ ÇÏ´Â ¹æ¹ýÀ» º¸µµ·Ï ÇÏÀÚ. ¿ì¸®´Â ¸ðµç classµéÀÌ °¡Áö°í ÀÖ´Â prototype property¸¦ »ç¿ëÇÏ°Ô µÉ °ÍÀÌ´Ù. prototype property´Â classÀÇ ¾î¶°ÇÑ object°¡ °¡Áö°í ÀÖÀ» ¸ðµç ¸â¹öµéÀ» Æ÷ÇÔÇÏ´Â objectÀÌ´Ù. String, Number, and Date °°Àº default JS classµé Á¶Â÷µµ prototype objectÀ» °¡Áö°í ÀÖ´Ù. ¿ì¸®´Â methodµé°ú propertyµéÀ» prototype object¿¡ Ãß°¡ ÇÒ ¼ö ÀÖ´Ù. ±× classÀÇ ¾î¶°ÇÑ object°¡ ÀÌ »õ·Î¿î ¸â¹ö¸¦ ÀÚµ¿À¸·Î ¾ò´Â´Ù.
Pet.prototype.communicate = function(){
alert('I do not know what I should say, but my name is ' + this.name);
};
prototype.js°ú °°Àº ¶óÀ̺귯¸®´Â ¿©·¯¸ð·Î Æí¸®ÇÒ ¶§°¡ ÀÖ´Ù. ¸¸ÀÏ ¿ì¸®°¡ prototype.js¸¦ »ç¿ëÇÑ´Ù¸é, ¿ì¸®ÀÇ Äڵ带 ±ò²ûÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.(Àû¾îµµ ³» °ßÇØ·Î´Â..)
var Pet = Class.create();
Pet.prototype = {
//our 'constructor'
initialize: function(petName, age){
this.name = petName;
this.age = age;
},
communicate: function(){
alert('I do not know what I should say, but my name is ' + this.name);
}
};
Functions as arguments, an interesting pattern
¸¸ÀÏ ¿©·¯ºÐÀÌ Å¬·ÎÁ®(ÀýÂ÷¸¦ ¿ÀºêÁ§Æ®·Î¼ Ãë±ÞÇÏ´Â ±â´É. ÀÌ ¿ÀºêÁ§Æ®È µÈ ÀýÂ÷¸¦ Ŭ·ÎÁ®¶óÇÔ)¸¦ Áö¿øÇÏ´Â ¾ð¾îµé - Ruby ¶Ç´Â C#2.0- À» ÀÌ¿ëÇÏ¿© ÀÛ¾÷ÇÑ ÀûÀÌ ¾ø´Ù¸é ¿©·¯ºÐÀº ´ÙÀ½ À̵ð¾öÀÌ ¸Å¿ì »ý¼ÒÇϴٴ°ÍÀ» ´À³¥ °ÍÀÌ´Ù.
var myArray = ['first', 'second', 'third'];
myArray.each( function(item, index){
alert('The item in the position #' + index + ' is:' + item);
});
¿ö~! ³»°¡ ³Ê¹« ¾Õ¾î¼ ¿©·¯ºÐÀÌ À̰ͺ¸´Ù ´õ ÁÁÀº ±â»ç¸¦ ã¾Æ º¸±â Àü¿¡ ¿©±â ¹«½¼ ÀÏÀÌ »ý°å´ÂÁö ¼³¸íÇÑ´Ù.
¹«¾ùº¸´Ù ¸ÕÀú, À§ ¿¹Á¦¿¡¼ ¿ì¸®´Â prototype.js library¸¦ »ç¿ëÇϰí ÀÖ´Ù. À̰ÍÀº Array class¿¡ each functionÀ» Ãß°¡ÇÑ´Ù. each functionÀº function objectÀ» ÇϳªÀÇ ÀÎÀÚ¸¦ ¹Þ´Â´Ù. Â÷·Ê·Î, array¿¡¼ °¢ item¿¡ ´ëÇØ ÀÌ functionÀ» Çѹø¾¿ È£Ãâ ÇÒ °ÍÀ̸ç, È£ÃâµÉ¶§ µÎ°³ÀÇ ÀÎÀÚ¸¦ Àü´ÞÇÑ´Ù. ÇöÀç item¿¡ ´ëÇÑ ±× item°ú index ÀÌ´Ù. ÀÚ ¿ì¸®ÀÇ iterator functionÀ» È£Ãâ ÇØº¸ÀÚ. ¶ÇÇÑ ¿ì¸®´Â À̰Ͱú °°Àº ÀÛ¼ºµÈ Äڵ带 ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
function myIterator(item, index){
alert('The item in the position #' + index + ' is:' + item);
}
var myArray = ['first', 'second', 'third'];
myArray.each( myIterator );
ºñ·Ï, ÀÌ ¸¶Áö¸· Æ÷¸ËÀÌ ÀÌÇØÇϱ⿡ ´õ ÆíÇÏÁö¸¸ myIterator functionÀ» ã´Â Äڵ忡¼ ÁÖº¯À¸·Î Æ¢¾î ¹ö¸®´Â Çö»óÀ» ¾ß±âÇÑ´Ù. myIterator¸¦ È£ÃâÇÏ´Â °°Àº Àå¼Ò¿¡¼ iterator functionÀÇ ·ÎÁ÷À» °¡Áö´Â°ÍÀÌ ÁÁ´Ù. ¶ÇÇÑ, À̰æ¿ì¿¡, ¿ì¸®ÀÇ Äڵ忡¼ ¾îµð ´Ù¸¥ °÷¿¡ iterator function¸¦ ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ» °ÍÀ̸ç, ±×·¡¼ ¿ì¸®´Â ¹®Á¦¾øÀÌ myIterator functionÀ» anonymous function·Î ÇÒ ¼ö ÀÖ´Ù.
¿ø·¡ÀÇ ¿¹Á¦¸¦ ´õ ºÐ¸íÇÏ°Ô Çϱâ À§Çؼ ¾î¶² ÇÏÀ̶óÀÌÆÃ È¿°ú¸¦ ÀÌ¿ëÇØ¼ ´Ù½Ã º¸ÀÚ.
var myArray = ['first', 'second', 'third'];
myArray.each( function(item, index){
alert('The item in the position #' + index + ' is:' + item);
} );
This is this but sometimes this is also that
¿ì¸®°¡ °¡Áö°í ÀÖ´Â °¡Àå ÀϹÝÀûÀÎ ¹®Á¦µé °¡¿îµ¥ Çϳª´Â JS¸¦ ÀÌ¿ëÇÔ¿¡ ÀÖ¾î¼ this Ű¿öµåÀÇ »ç¿ëÀ» ¿ì¸®ÀÇ Äڵ忡 ÀÛ¼ºÇϱ⠽ÃÀÛÇÒ ¶§ ÀÌ´Ù. ±×°ÍÀº ½ÇÁ¦ ¿Ã°¡¹Ì°¡ µÉ¼ö ÀÖ´Ù.
¿ì¸®°¡ Àü¿¡ ¾ð±ÞÇÑ °Í ó·³, ÇÔ¼ö ¶ÇÇÑ JS¿¡¼ objectÀÌ°í ¶§¶§·Î ¿ì¸®´Â function¸¦ Àü´ÞÇÑ °ÍÀ» ¾Ë¾Æ äÁö ¸øÇÑ´Ù.
¿¹Á¦·Î ÀÌ ÄÚµå Á¶°¢À¸·Î ´Ù·ï º¸ÀÚ.
function buttonClicked(){
alert('button ' + this.id + ' was clicked');
}
var myButton = document.getElementById('someButtonID');
var myButton2 = document.getElementById('someOtherButtonID');
myButton.onclick = buttonClicked;
myButton2.onclick = buttonClicked;
buttonClicked function¸¦ ¾î¶°ÇÑ object ¿ÜºÎ¿¡¼ Á¤ÀÇ ÇÏ¿´±â ¶§¹®¿¡ ¿ì¸®´Â this Ű¿öµå°¡ window ¶Ç´Â document object ÂüÁ¶¸¦ Æ÷ÇÔ ÇÒ °ÍÀ̶ó°í »ý°¢ÇÏ´Â °æÇâÀÌ ÀÖÀ» °ÍÀÌ´Ù.(ÀÌÄÚµå ºê¶ó¿ìÀú¿¡¼ º¸¿©Áö´Â HTML ÆäÀÌÁöÀÇ Áß¾Ó¿¡ ÀÖ´Ù°í °¡Á¤ ÇÏÀÚ.)
±×·¯³ª ¿ì¸®°¡ ÀÌ Äڵ带 ½ÇÇà½ÃÄÑ º¸¸é ±×°ÍÀÌ Å¬¸¯µÈ ¹öưÀÇ id¸¦ °¡¸®Å°°Å³ª º¸¿©Áö´Â °ÍÀ¸·Î ÀÛµ¿µÇ¾î º¸¿©Áø´Ù. °¢ ¹öưÀÇ onclick methodÀº buttonClicked object ÂüÁ¶¸¦ Æ÷ÇÔÇÏ°Ô µÇ¸ç, ÀÌÀüÀÇ °Å±â¿¡ ¹«¾ùÀÌ ÀÖ´ø°£¿¡ ±³Ã¼µÇ¾î Áø´Ù. ¹öưÀ» Ŭ¸¯ÇÒ¶§ ¸¶´Ù, ºê¶ó¿ìÀú´Â ´ÙÀ½ ÁÙ°ú °°Àº ¾î¶² ÀÏÀ» ¼öÇàÇÒ °ÍÀÌ´Ù.
myButton.onclick();
°á±¹ ±×·¸°Ô È¥¶õ½º·¯¿î°ÍÀº ¾Æ´Ï´Ù. ±×·¸ÁÒ? ±×·¯³ª ¿©·¯ºÐÀÌ ´Ù·ï¾ßÇÒ ´Ù¸¥ object¸¦ °®±â ½ÃÀÛÇß°í ¹öưÀÇ click°ú °°Àº À̺¥Æ®¿¡¼ ÀÌ·¯ÇÑ object¸¦ ¹ÝÀÀ½ÃŰ±â ¿øÇÑ´Ù.
var myHelper = {
formFields: [ ],
emptyAllFields: function(){
for(i=0; i<this.formFields.length; i++){
var elementID = this.formFields[i];
var field = document.getElementById(elementID);
field.value = '';
}
}
};
//tell which form fields we want to work with
myHelper.formFields.push('txtName');
myHelper.formFields.push('txtEmail');
myHelper.formFields.push('txtAddress');
//clearing the text boxes:
myHelper.emptyAllFields();
var clearButton = document.getElementById('btnClear');
clearButton.onclick = myHelper.emptyAllFields;
³ªÀÇ ÆäÀÌÁö¿¡¼ Clear buttonÀ» Ŭ¸¯ ÇÒ¼ö ÀÖ°í ÀÌ 3°³ÀÇ text ¹Ú½ºµéÀ» ¸ðµÎ ºñ¿ï °ÍÀÌ´Ù. ±× ´ÙÀ½¿¡ ¿©·¯ºÐÀº runtime error¸¦ ¾ò±â À§ÇØ ´ÜÁö ¹öư Ŭ¸¯¸¸ ½ÃµµÇÏ¸é µÈ´Ù. ÀÌ ¿¡·¯´Â this Ű¿öµå¿Í °ü·Ã ÀÖÀ» °ÍÀÌ´Ù(ÃßÃø ÄÁµ¥..). ÀÌ ¹®Á¦´Â this°¡ ¹öư¿¡ ÂüÁ¶¸¦ Æ÷ÇÔÇÑ´Ù¸é this.formFields°¡ Á¤ÀÇ µÇÁö ¾Ê´Â´Ù °ÍÀÌ´Ù. À̰ÍÀº Á¤È®ÇÏ°Ô ¹«½¼ ÀÏÀÌ ¹ß»ý Çϰڴ°¡ ÀÌ´Ù. ÇѰ¡Áö ºü¸¥ ÇØ°áÃ¥Àº ¿ì¸®ÀÇ ÄÚµå ¸¶Áö¸· ÁÙÀ» Àç ÀÛ¼ºÇÏ´Â °ÍÀÌ µÉ °ÍÀÌ´Ù.
clearButton.onclick = function(){ myHelper.emptyAllFields(); };
±×°ÍÀº ¿ì¸®°¡ helper objectÀÇ ÄÁÅØ½ºÆ® ¾È¿¡ ¿ì¸®ÀÇ helper method¸¦ È£ÃâÇϴ ƯÁ¤ÀÇ Å¸ÀÔÀÇ »õ·Î¿î functionÀ» ¸¸µå´Â ¹æ¹ýÀÌ´Ù.