73
JavaScript packt aus: "Alle haben mich falsch verstanden!"

JavaScript packt aus: "Alle haben mich falsch verstanden!"

Embed Size (px)

Citation preview

Page 1: JavaScript packt aus: "Alle haben mich falsch verstanden!"

JavaScript packt aus: "Alle haben mich falsch verstanden!"

Page 2: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript - Inhalt

● Geschichte

● Sprache

● Grundlagen

● JSON/AJAX

● Objektorientierung

● Dialekte/Einsatz/Verwendung

● Demos

Page 3: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript - Warum?

„Statistisch gesehen ist ECMAScript die erfolgreichste Scriptsprache der Welt: Auf Milliarden Rechnern ist ein

Browser mit JavaScript-Interpreter installiert. Dieser Erfolg beruht ironischerweise nicht auf den Fähigkeiten von JavaScript. JavaScript ist eine mächtige Sprache, die

weitestgehend unzugänglich und unliebsam blieb.“

http://molily.de/js/standards.html

Page 4: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● Mocha -> LiveScript -> JavaScript

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 5: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● Mocha -> LiveScript -> JavaScript

● Netscape 2.0

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 6: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● Mocha -> LiveScript -> JavaScript

● Netscape 2.0

● Brendan Eich

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 7: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● JavaScript 1.1 -> Bilder

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 8: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● JavaScript 1.1 -> Bilder

● IE 3 -> JScript

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 9: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● JavaScript 1.1 -> Bilder

● IE 3 -> JScript

● ECMA

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 10: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● JavaScript 1.1 -> Bilder

● IE 3 -> JScript

● ECMA

● Netscape Enterprise Server 2.0

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 11: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Sprache

● C-Syntax

● dynamische Typen

● objektorientiert

● keine Klassen!

● Prototypen

● prozedural/funktional

● host environment

Page 12: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Browser-side

http://ejohn.org/files/perf-stack.png

Page 13: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Hello World

<script type="text/javascript"> alert("Hello World!"); </script>

Page 14: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Datentypen

● string

● number

● boolean

● undefined

● object (null)

● function

Page 15: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Werte/Variablen

● keine Typisierung

function mySum() {

var n1 = parseFloat(document.txtN1.value);var n2 = parseFloat(document.txtN2.value);

var sum = n1 + n2;document.txtSum.value = sum;

}

Page 16: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Werte/Variablen

● DOM<html> <head> <title>sum</title> <script type="text/javascript">

[...] </script> </head> <body> 1. number = <input type="text" name="txtN1"></input><br/> 2. number = <input type="text" name="txtN2"></input><br/> <input type="button" name="btnSum" value="calc" onclick="mySum()"></input><br/> sum = <input type="text" name="txtSum"></input> </body></html>

Page 17: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Werte/Variablen

● Array

var a1 = new Array();

var a2 = new Array(1, 2, 3);var a3 = [1, 2, 3];

var a4 = {b: 1, c: 2, d: 3};a4.c = 4;a4['c'] = 5;

Page 18: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Werte/Variablen

● typeof

var n = 4;var nType = typeof n; // numbervar nTypeType = typeof nType; // string

Page 19: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Operatoren

● C-Syntax

● ===, !== Typgleichheit

● delete

● in

● instanceof

● new

● typeof

● void

Page 20: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Core

● String, Number, Date

● Math, RegExp

● Events

Page 21: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Risiken

● Sicherheitsl ckenü

● schlechter Stil

● Pop-ups

● Gr sse ndernö ä

● verschleiern von Inhalten

Page 22: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● ECMA-262

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 23: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● ECMA-262

● XSL

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 24: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● ECMA-262

● XSL

● XML-Parser

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 25: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● PDF

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 26: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● PDF

● Netscape -> Mozilla

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 27: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● PDF

● Netscape -> Mozilla

● JavaScript 1.4 <-> ECMAScript-262

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 28: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● PDF

● Netscape -> Mozilla

● JavaScript 1.4 <-> ECMAScript-262

● kein Browser mit JS 1.4

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 29: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● PDF

● Netscape -> Mozilla

● JavaScript 1.4 <-> ECMAScript-262

● kein Browser mit JS 1.4

● IE -> 'AJAX'

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 30: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● PDF

● Netscape -> Mozilla

● JavaScript 1.4 <-> ECMAScript-262

● kein Browser mit JS 1.4

● IE -> 'AJAX'

● W3C -> DOM

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 31: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – AJAX

● Asynchronus JavaScript and XML

● XMLHttpRequest

Page 32: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – AJAX

http://de.wikipedia.org/wiki/Ajax_(Programmierung)

Page 33: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● ECMAScript-262 3nd

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 34: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● ECMAScript-262 3nd

● JSON

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 35: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● ECMAScript-262 3nd

● JSON

● RegEx

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 36: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – JSON

● Austauschformat

● einfach zu parsen

● menschenlesbar

● leichtgewichtig

● object, array

● value, string, number

Page 37: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – JSON

{"name": "John Smith",

"age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }

Page 38: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – JSON

● Alternative zu XML

● AJAX

● viele Implementierungen

Page 39: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – JSON

ASP, ActionScript, C, C++, C#, ColdFusion, Delphi, E, Erlang, Fantom, Go, Haskell, haXe, Java, Lasso, Lisp, Common Lisp, LotusScript, Lua, Objective C, Objective CAML, OpenLaszlo, Perl, PHP, Pike, PL/SQL, pljson, Prolog, Python, Qt, R, REALbasic, Rebol, RPG, Ruby, Squeak, Tcl, Visual Basic, Visual FoxPro

Page 40: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● IE 5.5 -> Marktanteile

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 41: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● IE 5.5 -> Marktanteile

● Netscape 6 -> Fehler

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 42: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● Mozilla 1.0

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 43: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● Mozilla 1.0

● Opera 6.0

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 44: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● „A new Approach to Web Applications“ -> AJAX

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 45: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● „A new Approach to Web Applications“ -> AJAX

● Frameworks (Prototype, jQuery)

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 46: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● „A new Approach to Web Applications“ -> AJAX

● Frameworks (Prototype, jQuery)

● W3C draft -> AJAX

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 47: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● HTML5

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 48: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Geschichte

● HTML5

● ECMAScritp Harmony

1995 – 1996 – 1997 – 1998 – 1999 – 2000 – 2001 – 2002 – 2003 – 2004 - 2005 – 2006 – 2007 – 2008 – 2009 – 2010

Page 49: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Sprache

● objektorientiert, aber keine Klassen?

Page 50: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Sprache

● objektorientiert, aber keine Klassen?

● Prototypen / Properties

Page 51: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Properties

● Objekte haben Felder

var v = new Object();

v.test = 'hello';

v['test'] = 'hello again';

Page 52: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Properties

● 'built-in' Felder

var v = new Object();

v.constructor;

v.prototype;

Page 53: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Constructor

● Definiton ber Funktion ü

function Foo(x) {

this.x = x;this.y = x+5;

}

var f = new Foo(); // new Foo

Page 54: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Prototypes

● prototype chain

Object.prototype.inObj = 1;

function A() { this.inA = 2; }A.prototype.inAProto = 3; function B() { this.inB = 4; }B.prototype = new A;B.prototype.inBProto = 5; var x = new B;

● x● inB: 4

● B.prototype● inA: 2● inBProto: 5

● A.prototype● InAProto: 3

● Object.prototype● inObj: 1

Page 55: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Prototypes

http://mckoss.com/jscript/object.htm

Page 56: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Prototypes

● methods

function Foo(x) { this.x = x; }

Foo.prototype.bar = function(y){

this.x += y;}

var f = new Foo(7);f.bar(7); // f.x == 14

Page 57: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Prototypes

● Polymorphism

function A() { this.x = 1; }A.prototype.doIt = function() { this.x += 2; } function B() { this.x = 4; }B.prototype.doIt = function() { this.x += 8; } var v = new B;x.doIt(); // x.x == 12

Page 58: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Prototypes

● private members

function Foo() {

var x = 5;this.getX = function () { return x; }this.setX = function (newX) { x = newX; }

}

Page 59: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Dialekte

● jeder: mehrere Implementierungen?

● JavaScript

● Jscript (.NET)

● ECMAScript

● ActionScript

● QtScript

● Objective-J

Page 60: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Engines

● SpiderMonkey -> C

● Rhino -> Java

● TraceMonkey

● V8 -> C++

● KJS

● SquirrelFish

● Tamarin -> C++

Page 61: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Server-side

● Scripting f r Anwendungenü

● Client-Anwendungen

● Server-Anwendungen

● Systemsprache/Programmiersprache

Page 62: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Adobe

● Flash -> ActionScript

● Adobe CS -> Erweiterungen

● Acrobat/Adobe Reader

Page 63: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Adobe

● Beispiel: PDF-Seiten rotieren

nStart = 0 // first page to rotatenEnd = this.numPages - 1; // last page to rotatenRotate = 90 // allowed rotations: 0, 90, 180, 270

try { if (this.numPages > 0) { this.setPageRotations(nStart,nEnd,nRotate) }} catch(e){app.alert("Processing error: "+e)}

Page 64: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – mehr Scripting

● Qt

● ActiveScripting

● OpenOffice

● Sphere/Unity/DX Studio

● Wikipedia

● Eclipse

Page 65: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Anwendungen

● Widgets/Gadgets

● Adobe Integrated Runtime

● Mozilla Platform

● Rhino

● Google

Page 66: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Widgets

<widget debug="on"> <script> var words = ["hi", "there", "you", "guys"]; var i = 0;

var doc = XMLDOM.parse( filesystem.readFile( "vitality.xml" ) ); t = doc.getElementById( "text" );

function setMyDockInfo() { t.setAttribute( "data", words[i++] ); if ( i > (words.length-1) ) i = 0;

widget.setDockItem( doc ); } </script> <timer interval="10.0" ticking="true" onTimerFired="setMyDockInfo();"/> <action trigger="onLoad"> setMyDockInfo(); </action></widget>

Page 67: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Anwendungen

● NodeJS

● CouchDB

Page 68: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – CouchDB

● View (by LastName/FirstName)

function(doc) { if (doc.Type == "customer") { emit(doc.LastName, {FirstName: doc.FirstName, Address: doc.Address}); emit(doc.FirstName, {LastName: doc.LastName, Address: doc.Address}); }}

Page 69: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Systemsprache

● JavaScript OSA

● KDE/GNOME

● webOS

● (Atomic OS) ;-)

Page 70: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – webOS

● appinfo.json

{"title": "Hello, world!","version": "0.0.1","type": "web","main": "index.html","id": "org.webosinternals.evanpro.app.helloworld","icon": "icon.png","vendor": "Evan Coury","vendorurl": "http://www.evan.pro/","visible": true,"removable": true

}

Page 71: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Webframeworks

● jQuery

● DOM Manipulation

● MooTools

● Drag&Drop, Sliding, Morphing

● Prototype

● DOM Manipulation, AJAX

Page 72: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Webframeworks

● Script.aculo.us

● basiert auf Prototype

● visuelle Effekte

● Dojo

● viele Funktionen

● Effekte, AJAX, Drag&Drop, Uhr/Kalender, Editoren

Page 73: JavaScript packt aus: "Alle haben mich falsch verstanden!"

Javascript – Demos

DEMOS / FRAGEN ?