EDA095 JavaScript. Per Andersson. Maj 4, Lund University Per Andersson EDA095 JavaScript Maj 4, / 23

Relevanta dokument
E13 Behind the Wild. Dagens agenda. Cookies Context/ändra context Augmentation (förstärkning) Klassiskt arv Att låna metoder Namespaces Postludium

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

JAVASCRIPT. Beteende

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Tillämpad programmering

Exemple på Tentauppgifter Webbprogrammering

Classes och Interfaces, Objects och References, Initialization

E13 "Behind the Wild"

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

OOP Objekt-orienterad programmering

Objektorienterad programmering

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Objektsamlingar i Java

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Typkonvertering. Java versus C

Innehåll. Användardefinierade typer. Användardefinierade typer Kategorier. Konstruktorer. Konstruktorer Två sätt att skriva initiering av medlemmar

Objektorienterad Programmering (OOP) Murach s: kap 12-16

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Tommy Färnqvist, IDA, Linköpings universitet

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

E03 "Day 3: 2:00 p.m 3:00 p.m"

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Introduk+on +ll programmering i JavaScript

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Imperativ programmering. Föreläsning 3

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

DAT043 Objektorienterad Programmering

Föreläsning 3: Booleans, if, switch

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Enkla variabler kontra referensvariabel

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektbaserad programmering

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Arrayer. results

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

TENTAMEN OOP

Föreläsning 6: Metoder och fält (arrays)

Modeller, Objekt och Klasser

Objektorienterad programmering i Java I

Tentamen Grundläggande programmering

Föreläsning 12. Länkade listor

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Kapitel 6 - Undantag

Tentamen i. TDDA 69 Data och programstrukturer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Programmering för språkteknologer II, HT2014. Rum

DAT043 - Föreläsning 7

Funktionens deklaration

Karlstads Universitet, Datavetenskap 1

Repetition C-programmering

TDIU01 Programmering i C++

Objektorienterad Programmering (TDDC77)

Programmering A. Johan Eliasson

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Parameteröverföring. Exempel. Exempel. Metodkropp

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Java, klasser, objekt (Skansholm: Kapitel 2)

Föreläsning 8: Exempel och problemlösning

Arrayer (fält)

Erfarenheter från labben

Klassdeklaration. Metoddeklaration. Parameteröverföring

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

Innehåll. Typomvandlingar (casting) Implicita Typomvandlingar. Typomvandlingar (casting) Implicita Typomvandlingar

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

public boolean containskey(string key) { return search(key, head)!= null; }

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Introduktion C-programmering

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

JS & beteende. TNMK30 - Elektronisk publicering

Innehåll. Konstruktorer vid arv Regler för basklassens konstruktor. Konstruktorer vid arv. Konstruktorer vid arv. Konstruktorer vid arv

Programmering för språkteknologer II, HT2011. Rum

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

12. Relationer och funktioner

tentaplugg.nu av studenter för studenter

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

E12 "Evil is going on"

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

JavaScript. En Introduktion

TENTAMEN OOP

Objektorienterad programmering Föreläsning 9. Copyright Mahmud Al Hakim Agenda (halvdag)

Transkript:

EDA095 JavaScript Per Andersson Lund University http://cs.lth.se/pierre_nugues/ Maj 4, 2017 Innehåll: JavaScript Per Andersson EDA095 JavaScript Maj 4, 2017 1 / 23

JavaScript JavaScript: syntax som Java interpreterat dynamiskt typat få varningar och run-time fel prototyp-funktions-objektorienterat enkeltrådat versioner: ECMAScript 1,... ECMAScript 6 (ECMAScript 2015), ECMAScript 7 (ECMAScript 2016) polyfill för att gamla runtile-miljöer ska stödja ny funktionalitet Per Andersson EDA095 JavaScript Maj 4, 2017 2 / 23

Typer Typer: boolean null number string object undefined function Per Andersson EDA095 JavaScript Maj 4, 2017 3 / 23

jämförelse JavaScript gör typkonvertering vid jämförelse 3.14 == "3.14" // true använd alltid === eller!== typeof är ofta del av jämförelse Per Andersson EDA095 JavaScript Maj 4, 2017 4 / 23

false Värden som evaluerar till false: false null undefined empty string number 0 number NaN Per Andersson EDA095 JavaScript Maj 4, 2017 5 / 23

literal literaler: 3.14 3.14 "3.14" { } {text: "hej", done: false, "a-b": null } [1, false, null, [], { a: 1, b: 2}] Per Andersson EDA095 JavaScript Maj 4, 2017 6 / 23

variabler behöver inte deklareras dynamisk typning call by reference, objekt kopieras aldrig ingen varning om namn deklareras flera gånger access till okända namn evaluerar till undefined function-scope Per Andersson EDA095 JavaScript Maj 4, 2017 7 / 23

namnrymd functions-scope best practice : deklarera alla variabler överst i funtioner minimera golbala namnrymden: ett globalt objekt med alla variabler som property var MYAPP = {}; MYAPP.myVar = "some value"; Block scope med let och const (ECMAScript 6) Per Andersson EDA095 JavaScript Maj 4, 2017 8 / 23

namnrymd let weapon = "sword"; if (true) { let offhand = "shield"; } if(true){ var head = "helmet"; } console.log(weapon); // sword console.log(offhand); // undefined console.log(head); // helmet Per Andersson EDA095 JavaScript Maj 4, 2017 9 / 23

namnrymd (function(app) { app.dataservice = DataService; function DataService() { this.mylist = [...]; } DataService.prototype.getTODOs = function() { return this.mylist; }; DataService.prototype.addTodo = function(todo) { this.mylist.push({text: todo.text, done: todo.done}); }; })(window.app = window.app {}); Per Andersson EDA095 JavaScript Maj 4, 2017 10 / 23

objekt klasser finns inte mängd av name/värde-par dold länk till ett prototypobjekt, prototype tilldelning till egna namn/värden vid läsning följs prototyp-kedjan prototype är dynamisk, ändras super-objektet ändras barnen Object.hasOwnProperty(string) följer inte prototyp-kedjan for (name in myobject) följer prototypkedjan delete tar bort namn/värde från objekt, rör ej prototyp-kedjan Per Andersson EDA095 JavaScript Maj 4, 2017 11 / 23

Förstärkta typer förstärkta typer (augmented types) modifiera prototyperna: Object.prototype Function.prototype Number.prototype Array.prototype Per Andersson EDA095 JavaScript Maj 4, 2017 12 / 23

array array är objekt (namn/värde) dynamisk typning var a = [ zero, one ;] var numbers_object = { 0 : zero, 1 : one }; a[1] === zero ; //true a.length === 3; //true b[10000] = true; b.length === 10000; //true numbers[numbers.length] = tre ; numbers.push( tre ); numbers.splice(2, 1); typeof numbers === object //true Per Andersson EDA095 JavaScript Maj 4, 2017 13 / 23

access var obj = { name: "Per", age: 42 } var a = obj.name; //Per var b = obj["name"]; //Per var c = obj.pnr; //undefined var d = obj.parent "unknown"; //unknown Per Andersson EDA095 JavaScript Maj 4, 2017 14 / 23

funktioner funktioner är objekt dolda properties : funktionens kontext och implementeringen var add = function (a, b) { return a + b; }; default returvärde: undefined this beror på anropsmönstret method: obj.foo();, this är objektet funktion: bar(); this är det globala objektet konstruktor: new MyObject(); this är ett nytt objekt OBS, default returvärde är this apply: add.apply(null, array); this anges explicit Per Andersson EDA095 JavaScript Maj 4, 2017 15 / 23

funktioner pil-fuktioner (ECMAScript 6) var fruits = [ banana, apple, pear ]; fruits.foreach(function (f) { // det gamla sättet console.log(f); // banana, apple, pear }); fruits.foreach(f => { // det nya sättet! console.log(f); // banana, apple, pear }); var numbers = [24, 11, 7, 13, 8]; numbers.sort((a, b) => { return a - b; }); console.log(numbers); // 7, 8, 11, 13, 24 Per Andersson EDA095 JavaScript Maj 4, 2017 16 / 23

closure closure funktioner ser omgivningen omgivningen lever så länge funktionen lever var myobject = function () { var value = 0; return { increment: function (inc) { value += typeof inc === number? inc : 1; }, getvalue: function () { return value; } }; }( ); Per Andersson EDA095 JavaScript Maj 4, 2017 17 / 23

oops // BAD EXAMPLE var add_the_handlers = function (nodes) { var i; for (i = 0; i < nodes.length; i += 1) { nodes[i].onclick = function (e) { alert(i); }; } }; // END BAD EXAMPLE Per Andersson EDA095 JavaScript Maj 4, 2017 18 / 23

works var add_the_handlers = function (nodes) { var i; for (i = 0; i < nodes.length; i += 1) { nodes[i].onclick = function (i) { return function (e) { alert(e); }; }(i); } }; Per Andersson EDA095 JavaScript Maj 4, 2017 19 / 23

asynkrona händelser request = prepare_the_request(); response = send_request_synchronously(request); display(response); request = prepare_the_request(); send_request_asynchronously(request, function (response) { display(response); }); Per Andersson EDA095 JavaScript Maj 4, 2017 20 / 23

promise promise.then(function(result) { console.log(result); // "Stuff worked!" }, function(err) { console.log(err); // Error: "It broke" }); Per Andersson EDA095 JavaScript Maj 4, 2017 21 / 23

serierkoppling cascade, låt metoder returnera this getelement( myboxdiv ). move(350, 150). width(100). height(100). color( red ). border( 10px outset ). padding( 4px ). appendtext("please stand by"). on( mousedown, function (m) { this.startdrag(m, this.getninth(m)); }). on( mousemove, drag ). on( mouseup, stopdrag ). later(2000, function () { this. color( yellow ). sethtml("what hath God wraught?"). slide(400, 40, 200, 200); }). tip( This box is resizeable ); Per Andersson EDA095 JavaScript Maj 4, 2017 22 / 23

namngivna argument långa listor med argument är svåra att läsa... var foo = function(a, b, c, d, e, f, g, h){... alert( f ); } var bar = function(args){... alert( args.f ); } foo(1, 1, 1, 1, 1, 1, 2, 1, 1); bar({a: 1, b: 1, c: 1, d: 1, e: 1, f: 2, g: 1, h: 1}); Per Andersson EDA095 JavaScript Maj 4, 2017 23 / 23