Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScriptの歴史
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Naomichi Yamakita
September 10, 2012
43
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JavaScriptの歴史
Naomichi Yamakita
September 10, 2012
More Decks by Naomichi Yamakita
See All by Naomichi Yamakita
現場で試したAI駆動開発
naomichi
0
46
ClickHouse活用によるパフォーマンス改善について
naomichi
0
190
SRE が駆動するプロダクト品質と アーキテクチャ進化の仕組み
naomichi
0
220
今こそ聞きたい!ガバメントクラウド
naomichi
0
66
AWSにおける横断的なログ分析と コストの管理
naomichi
1
7.1k
失敗から始まるリアーキテクト: SREの実践例で見る改善の道筋
naomichi
0
910
プロダクト横断で可視化する ダッシュボードの開発
naomichi
0
420
第一回ライブラリ開発について考える会
naomichi
0
160
Serverless Application Repositoryでトイルを削減する
naomichi
0
370
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Designing for Timeless Needs
cassininazir
1
430
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
190
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
340
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
230
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
410
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Transcript
+BWB4DSJQUͷྺ࢙ %5$PSQ /BPNJDIJ:BNBLJUB
ΞδΣϯμ +BWB4DSJQUͷ֓ཁͱྺ࢙ ͷτϨϯυ ࠷ޙʹೋݴ͘Β͍
+BWB4DSJQUͷ֓ཁͱྺ࢙
ੜൿ Πϯλʔωοτॳظʢʣ ΞϜϥʔɺ%"ɾ:0ɾ/&࣌ ࣌ɺμΠφϛοΫͳίϯςϯπΛ࡞Δʹɺ$(*"DUJWF9$POUSPMɺ +BWB"QQMFU͕ඞཁͩͬͨ ͜ΕΒͷٕज़ॳ৺ऀʹෑډ͕ߴ͔ͬͨ
ੜൿ ʮͬͱखܰʹɺΠϯλϥΫςΟϒͳ ػೳΛ͍࣋ͨͤͨ͜ͱͰ͖ͳ͍͔ʯ /FUTDBQF$PNNVOJDBUJPOT
ੜൿ /FUTDBQF$PNNVOJDBUJPOTࣾʹΑͬͯ-JWF4DSJQU͕։ൃ͞ΕΔ ࣌/FUTDBQF$PNNVOJDBUJPOTͱ4VO.JDSPTZTUFNʢݱ0SBDMFʣ͕ ఏܞ͍ͯͨ͜͠ͱʢ+BWB͕ྲྀߦͬͯͨ͜ͱʣ͋Γɺ໊শΛ+BWB4DSJQU ʹมߋ /FUTDBQF/BWJHBUPSͰॳొ
ݴޠͷಛੑ ΠϯλϓϦλݴޠ ίϯύΠϧ͕ෆཁ ߏจ͕+BWBʹࣅ͍ͯΔ ͨͩ͠+BWB+BWB4DSJQU
ະͩʹʮ͋ʔ)5.-ͱҰॹʹ+BWBमਖ਼͠ͱ͍ͯʯͱ͔ݴ͏ਓ͕͍Δ ಈతܕએݴ ؔܕϓϩάϥϛϯά ΦϒδΣΫτࢦ +BWB1)1͕ΫϥεϕʔεͷΦϒδΣΫτࢦͰ͋Δͷʹର͠ɺ +BWB4DSJQUϓϩτλΠϓϕʔεͷΦϒδΣΫτࢦͰ͋Δ
ϓϩτλΠϓϕʔεͷΦϒδΣΫτࢦ +BWB4DSJQU͕࣋ͭશͯͷσʔλʢϓϦϛςΟϒܕΛআ͖ʣΦϒδΣΫτ શͯͷؔΦϒδΣΫτQSPUPUZQFϓϩύςΟΛ࣋ͭ var IPad = function() {
this.vendor = "Apple"; }; IPad.prototype = { name: "iPad", late: 2011, }; var NewIPad = function(late) { this.late = late; }; NewIPad.prototype = new IPad(); NewIPad.prototype.name = "iPad mini"; var newIPad = new NewIPad(2012); console.log(newIPad.vendor); // (1) console.log(newIPad.late); // (2) console.log(newipad.name); // (3) "QQMF J1BENJOJ lJz͕খจࣈͳͷͰ l6ODBVHIU3FGFSFODF&SSPS OFXJQBEJTOPUEF fi OFEzͰͨ͠ ʢେจࣈɾখจࣈ۠ผ͞ΕΔ
ϓϩτλΠϓΫΠζ Կ৭ʹͳΔͰ͠ΐ͏ var Container = function(){}; Container.prototype = {
color: "red" }; var container = new Container(); console.log(container.color); // (1) Container.prototype = { color: "blue" }; console.log(container.color); // (2) var container2 = new Container(); console.log(container2.color); // (3) Container.prototype.color = "yellow"; console.log(container.color); // (4) console.log(container2.color); // (5)
+BWB4DSJQU͕࣋ͭXJOEPXΦϒδΣΫτ ΫϥΠΞϯταΠυ+BWB4DSJQUϒϥβΛૢ࡞͢Δ"1*Λఏڙ͍ͯ͠Δ OBWJHBUPS MPDBUJPO IJTUPSZ
TDSFFO GSBNFT EPDVNFOUʢ%0.ʣ QBSFOU UPQ TFMG
ᴈ໌ظʢʙʣ *OUFSOFU&YQMPSFSʹ+4DSJQU͕ࡌ͞Εɺٸʹීٴ͕࢝·Δ +4DSJQU.JDSPTPGU͕+BWB4DSJQUΛϕʔεʹಠ࣮ࣗͨ͠ݴޠ ɺ*OUFSOFU&YQMPSFS͔Βຊ֨తͳ%ZOBNJD)5.-࣌ಥೖ )5.- $44
+BWB4DSJQUʢ%0.ʣΛͬͨμΠφϛοΫίϯςϯπ ϒϥβઓ૪ͷ࢝·Γ *OUFSOFU&YQMPSFSWT/FTDBQF/BWJHBUPS
%0.ʢ%PDVNFOU0CKFDU.PEFMʣ +BWB4DSJQU͔Β)5.-9.-Λૢ࡞͢ΔͨΊͷ"1* %0.Λ͏͜ͱͰɺ)5.-ʹಛఆͷཁૉଐੑΛՃͨ͠Γɺطଘͷଐੑ Λมߋ͢Δ͜ͱ͕Ͱ͖Δ %0.+BWB4DSJQUͷαϒηοτͰͳ͍ʢ༷͕ಠཱ͍ͯ͠Δʣ <div id="foo">
<span>a</span> <span>b</span> <span>c</span> </div> <script> var foo = document.getElementById("foo"); var elements = foo.getElementsByTagName("span"); console.log(elements[0].innerHTML); </script>
ΠϕϯτʢΠϕϯτϋϯυϥʣ Ϣʔβ͕ൃੜͤ͞ΔΠϕϯτʹର͠ɺΠϕϯτϋϯυϥʢؔʣΛ࣮ߦ͢Δ ʮૹ৴Ϙλϯ͕ԡ͞ΕͨΒϑΥʔϜͷσʔλΛݕূ͢Δʯ ʮೖྗ͞ΕͨΩʔͷจࣈΛνΣοΫ͢Δʯ Πϕϯτϋϯυϥͷछྨ
PODMJDL POLFZVQ PODIBOHF POMPBE POTFMFDU
Πϕϯτϋϯυϥͷ͍ํ <script> function changeGreeting(value) { document.getElementById('greeting-message').innerText = value; } </script>
<form action="onclick.html" method="post"> <div class="form-field"> <label for="greeting">Your greeting</label> <input type="text" id="greeting" name="greeting" value="" onkeyup="changeGreeting(this.value)" /> </div> </form> <p id="greeting-message"></p>
ΠϕϯτʢΠϕϯτϦεφʣ ԿΒ͔ͷΠϕϯτΛड͚औͬͯॲཧΛ࣮ߦ͢Δ Πϕϯτϋϯυϥͭͷཁૉʹରͭ͠ͷΠϕϯτ͔࣮͠ߦͰ͖ͳ͍͕ɺΠ ϕϯτϦεφෳͷΠϕϯτΛ࣮ߦ͢Δ͜ͱ͕Ͱ͖Δ <script> // ಉ͡ཁૉʹෳͷϋϯυϥ͕ొ͞ΕͯΔ߹ɺޙʹࢦఆͨ͠ํ͕༏ઌ͞ΕΔ
window.onload = function() { console.log(‘Hello!’); }; window.onload = function() { conosle.log(‘good bye!’); }; </script>
ΠϕϯτϦεφͷ͍ํ <!doctype html> <html> <head> </head> <body> <form action="onclick.html" method="post">
<div class="form-field"> <label for="greeting">Your greeting</label> <input type="text" id="greeting" name="greeting" value="" /> </div> </form> <p id="greeting-message"></p> </body> <script> var greetingMessage = document.getElementById('greeting'); greetingMessage.addEventListener('keyup', function(e) { document.getElementById('greeting-message').innerText = e.target.value; }, false); </script> </html>
%)5.-ͰͰ͖Δ͜ͱͷදྫ ϚεΛಈ͔͢ͱϙΠϯλʹˑ͕͖ͭ·ͱ͏ ઇͷ݁থ͕߱Δ ʮӈΫϦοΫېࢭͰ͢ʂʂʂʯͱΞϥʔτΛग़͢͜ͱ͕Ͱ͖Δ
ණՏظͷ౸དྷ ֤ϒϥβϕϯμʔಠࣗͷ༷Λ֦ு͢ΔͨΊɺϒϥβؒͷޓੑߴ ͍ͷͱݴ͑ͳ͔ͬͨ ҰͭͷॲཧΛ࣮ߦ͍͚ͨͩ͠ͳͷʹɺϒϥβ͝ͱʹίʔυΛذͯ͠ هड़͢Δ͜ͱ͋Γɺଟ͘ͷόουϊϋΛੜΉ݁Ռʹ ηΩϡϦςΟϗʔϧͨ͘͞Μʂ
ʮ+BWB4DSJQUΦϯऑͷۃΈʂʯ ઇ͕߱ΔαΠτ͕૿͑ɺٿͷؾީ͕ظʹͬͯפྫྷԽ ණՏظ࣌ ɺ&$."ʢඪ४Խن֨ʣ͕ެ։͞ΕΔ
த൫"+"9ͷొ 8FCٕज़௨৴ճઢͷൃలʹΑΓɺຊ֨తʹ8FCΞϓϦ͕ීٴ࢝͠ΊΔ 8FC "+"9ʢඇಉظ੍ޚʣ͕ొ %).5- 9.-)UUQ3FRVFTUΛΈ߹Θٕͤͨज़
(PPHMF.BQTͷొ 9.-)UUQ3FRVFTU +BWB4DSJQUͷ)551௨৴ػೳΛ༻͍ͯɺಈతϑΝΠϧΛಡΈࠐΉ"1* ΫϩευϝΠϯ੍ʹΑΓɺ֎෦αʔόͷϑΝΠϧΛಡΈࠐΉ͜ͱͰ ͖ͳ͍ʢͨͩ͠+40/1Λ͑ಡΈࠐΈՄೳʣ
"+"9ϥΠϒϥϦ͕ଓʑͱొ͠ɺ࠶ͼ+BWB4DSJQU͕٭ޫΛཋͼ࢝ΊΔ දతͳϥΠϒϥϦ QSPUPUZQFKTɺ:6*ɺK2VFSZ ػೳ ΫϩεϒϥβରԠ
"+"9ػೳ ηϨΫλΛͬͨ%0.ૢ࡞ Ϧον6*ɺ69ͷఏڙ ޙ"+"9ϥΠϒϥϦͷొ
K2VFSZͷαϯϓϧίʔυ <!doctype html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></ script> <script> $(document).ready(function(){
$('#greeting').keyup(function(e){ $('#greeting-message').text(e.target.value); }); }); </script> </head> <body> <form action="onclick.html" method="post"> <div class="form-field"> <label for="greeting">Your greeting</label> <input type="text" id="greeting" name="greeting" value="" /> </div> </form> <p id="greeting-message"></p> </body> </html>
ϒϥβઓ૪࠶ͼ 3&45"1*ͷར༻͕ྲྀߦΓ࢝ΊΔ GBDFCPPLɺ5XJUUFSɺBNB[POɺNJYJ .P[JMMB'PVOEBUJPOʹΑΔ+BWB4DSJQUͷύϑΥʔϚϯεվળ +BWB4DSJQUͷߴԽڝ૪ʢظϦϦʔεαΠΫϧʣ͕࢝·Δ
)5.-$44ͷ࣮ணʑͱਐߦத ֤ϒϥβ͕ࡌ͢Δ+BWB4DSJQUΤϯδϯ $ISPNF7 'JSFGPY+ÅHFS.POLFZ *OUFSOFU&YQMPSFS$IBLSB
ͷτϨϯυ
+BWB4DSJQU.7$࣌ͷນ։͚ "+"9ϥΠϒϥϦ͕ొ͓͔ͨ͛͠ͰϑϩϯτΤϯυͷ։ൃָʹͳͬͨ ࠓޙ+BWB4DSJQUΛ͏໘·͢·͢૿͑ͯ͘ΔͰ͋Ζ͏ )5.-ɺ$44ɺ3&45"1*ʜ ෳࡶԽ͢ΔίʔυʹରԠ͢ΔͨΊ+BWB4DSJQUʹ.7$ͷ͕͖ͨʂ
.7$ϑϨʔϜϫʔΫͷൺֱ ଓʑͱ.7$ϑϨʔϜϫʔΫ͕ొ͍ͯ͠Δ 5IF5PQ+BWBTDSJQU.7$'SBNFXPSLT3FWJFXFE IUUQDPEFCSJFGDPNUIFUPQKBWBTDSJQUNWDGSBNFXPSLTSFWJFXFE
༗ྗީิ#BDLCPOFKT ࠷ۙ(PPHMF͕ϦϦʔεͨ͠"OHVMBS+4ג ओཁϑϨʔϜϫʔΫ
"OHVMBS+4ͷαϯϓϧίʔυ <!doctype html> <html ng-app> <head> <script src="http://code.angularjs.org/ angular-1.0.1.min.js"></script> </head>
<body> <form action="onclick.html" method="post"> <div class="form-field"> <label for="greeting">Your greeting</label> <input type="text" ng-model="yourName" placeholder="Input greeting!"> </div> </form> <p>{{yourName}}</p> </body> </html>
"OHVMBS+4σϞϯετϨʔγϣϯ 6*όΠϯσΟϯά IUUQQIQVOJUBOHVMBSKTVJ@CJOEJOHT ίϯτϩʔϥΛ͏ IUUQQIQVOJUBOHVMBSKTMPPQ@ fi
MUFS 5XJUUFS"1*ͷར༻ IUUQQIQVOJUBOHVMBSKTUXJUUFS
͜Ε͔Βͷ+BWB4DSJQU αʔόαΠυ+BWB4DSJQUʢ/PEFKTɺ(PPHMF"QQT4DSJQUʣͷར༻ ΫϥΠΞϯταʔόαΠυશͯΛ+BWB4DSJQUԽ͢Δ͜ͱՄೳ
࠷ޙʹೋݴ͘Β͍
+BWB4DSJQUΠΠ͡ΌΜʂ ϑΥʔϜͷσʔλνΣοΫ+BWB4DSJQUʹҰ͠Α͏ʂ ةݥɻ+BWB4DSJQUແޮʹͰ͖Δ͜ͱΛΕͯͳΒͳ͍ αʔόαΠυͰݕূ͍ͯ͠ͳ͍ͱɺࢥΘ͵ηΩϡϦςΟϗʔϧΛಥ͔Ε ΔՄೳੑ͕͋Δ αʔόαΠυͷݕূΛඞਢͱ͠ɺ+BWB4DSJQUͷݕূ͋͘·Ͱิॿతͳ
ͷͱߟ͑Δ͖ 1$ɺεϚʔτϑΥϯɺΨϥέʔʹରԠͪ͠Ό͓͏ʂ ೦ͳ͕ΒΨϥέʔʢώϡʔνϟʔϑΥϯʣ+BWB4DSJQUʹඇରԠ ຊະͩΨϥέʔׂ͕ʂ
+BWB4DSJQUͷ։ൃςΫχοΫ ιʔείʔυͷѹॖ $%/ͷར༻ σόοάߏจͷར༻ σόοάɺϓϩϑΝΠϦϯάπʔϧͷར༻
$ISPNFσϕϩούʔπʔϧ 'JSFGPY'JSFCVH ςετπʔϧͷಋೖ 26OJU +FOLJOT