Soumettre la recherche
Mettre en ligne
Professional Javascript for Developers
•
Télécharger en tant que PPSX, PDF
•
2 j'aime
•
454 vues
R
Rule_Financial
Suivre
Signaler
Partager
Signaler
Partager
1 sur 20
Télécharger maintenant
Recommandé
Zajecia4 progbiz
Zajecia4 progbiz
TomaszWoniakowski1
Prezentacja php3
Prezentacja php3
TomaszWoniakowski1
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
Rafal Piekarski
Optional - nigdy więcej NullPointerException
Optional - nigdy więcej NullPointerException
Artur Stepkowski
Php P.Jar
Php P.Jar
Jan Jackowicz-Korczyński
Kurs VBA - Procedury VBA w Excelu cz.III
Kurs VBA - Procedury VBA w Excelu cz.III
COGNITY Szkolenia
TypeScript as a runtime error terminator
TypeScript as a runtime error terminator
The Software House
Podstawy php
Podstawy php
TomaszWoniakowski1
Recommandé
Zajecia4 progbiz
Zajecia4 progbiz
TomaszWoniakowski1
Prezentacja php3
Prezentacja php3
TomaszWoniakowski1
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
JavaScript jako przykład obiektowego języka zorientowanego na prototypy
Rafal Piekarski
Optional - nigdy więcej NullPointerException
Optional - nigdy więcej NullPointerException
Artur Stepkowski
Php P.Jar
Php P.Jar
Jan Jackowicz-Korczyński
Kurs VBA - Procedury VBA w Excelu cz.III
Kurs VBA - Procedury VBA w Excelu cz.III
COGNITY Szkolenia
TypeScript as a runtime error terminator
TypeScript as a runtime error terminator
The Software House
Podstawy php
Podstawy php
TomaszWoniakowski1
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
Brainhub
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Codesushi.co (CODESUSHI LLC)
TorqueBox - Ruby na sterydach
TorqueBox - Ruby na sterydach
marekgoldmann
Functional widgets in Rails
Functional widgets in Rails
Sebastian Sito
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
PROIDEA
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
The Software House
Php5
Php5
guestdaf10d
Seam framework in_action
Seam framework in_action
Michał Orman
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
The Software House
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Szymon Stępniak
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Maciej Ziarko
Torquebox
Torquebox
Przemyslaw Wroblewski
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
DreamLab
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)
Bartlomiej Zass
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + Websockets
The Software House
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założenia
Bartlomiej Zass
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
Infoshare
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
Jakub Marchwicki
Angular 4 pragmatycznie
Angular 4 pragmatycznie
Sages
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows Application
Maciej Zbrzezny
Contenu connexe
Similaire à Professional Javascript for Developers
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
Brainhub
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Codesushi.co (CODESUSHI LLC)
TorqueBox - Ruby na sterydach
TorqueBox - Ruby na sterydach
marekgoldmann
Functional widgets in Rails
Functional widgets in Rails
Sebastian Sito
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
PROIDEA
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
The Software House
Php5
Php5
guestdaf10d
Seam framework in_action
Seam framework in_action
Michał Orman
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
The Software House
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Szymon Stępniak
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Maciej Ziarko
Torquebox
Torquebox
Przemyslaw Wroblewski
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
DreamLab
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)
Bartlomiej Zass
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + Websockets
The Software House
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założenia
Bartlomiej Zass
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
Infoshare
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
Jakub Marchwicki
Angular 4 pragmatycznie
Angular 4 pragmatycznie
Sages
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows Application
Maciej Zbrzezny
Similaire à Professional Javascript for Developers
(20)
Lexical scope, function vs. block scope, hoisting, scope closures
Lexical scope, function vs. block scope, hoisting, scope closures
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
Warsztaty: Podstawy PHP - część 2 - omówienie składni języka PHP (wersja 7)
TorqueBox - Ruby na sterydach
TorqueBox - Ruby na sterydach
Functional widgets in Rails
Functional widgets in Rails
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
JDD2014: JAVA.util.concurrent czyli wielowątkowość z różnych perspektyw, tych...
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Znaki mocy dla laików – Programowanie funkcyjne w JavaScript
Php5
Php5
Seam framework in_action
Seam framework in_action
Testy API: połączenie z bazą danych czy implementacja w pamięci
Testy API: połączenie z bazą danych czy implementacja w pamięci
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Toruń JUG - Wprowadzenie do wybranych zagadnień JDK 8
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Torquebox
Torquebox
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Intro to JavaScript | Wstęp do programowania w Java Script | DreamLab Academy #4
Wzorce projektowe (w ASP.NET i nie tylko)
Wzorce projektowe (w ASP.NET i nie tylko)
React Ninja - Warsztaty TDD + React + Redux + Websockets
React Ninja - Warsztaty TDD + React + Redux + Websockets
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założenia
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
infoShare 2011 - Jacek Laskowski - Programowanie Funkcjonalne Funkcyjnie z Cl...
[PL] Jak programować aby nie zwariować
[PL] Jak programować aby nie zwariować
Angular 4 pragmatycznie
Angular 4 pragmatycznie
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows Application
Professional Javascript for Developers
1.
Profesjonalny JavaScript dla Programistów
Javy Grzegorz Borkowski
2.
JavaScript – podstawy
Najlepsza wg mnie książka na temat JavaScriptu jako języka programowania: JavaScript: The Good Parts by Douglas Crockford (O‟Reilly) Polskie wydanie: JavaScript - mocne strony (Helion) JavaScript używa składni podobnej do Javy - ale to zmyłka, bo na tym podobieństwa się kończą; JavaScript jest kompletnie innym typem języka, bliżej mu do języków funkcjonalnych. JavaScript jest używany zazwyczaj w środowisku DOM, a DOM jest niewygodny w użyciu JavaScript ma wiele błędów i wad, ale ma też mocne strony © Rule Financial 2011 2
3.
JavaScript – podstawy
Zmienne - var: var x = 5; Zmienne mają zasięg funkcji: function test() { var x = 5; } alert(x) ; //x undefined Jeśli zapomnimy słowa var, zmienna stanie się globalna! Również var poza jakąkolwiek funkcją da zmienną globalna: x = 5; // zmienna globalna! var y = 6; // zmienna globalna jeśli poza funkcją! © Rule Financial 2011 3
4.
Obiekty Wszystko jest
obiektem, lub typem prostym (primitive type) Typy proste (strings, numbers, booleans) są niezmienne Obiekty są zmienne Obiekty są po prostu mapami (kolekcje klucz-wartość) Dostęp do atrybutów obiektu poprzez notację kropkową (dot notation) lub klamrową (bracket notation) © Rule Financial 2011 4
5.
Obiekty Dot notation
i bracket notation: var tree = {}; // pusty obiekt tree.type = 'oak'; tree.height = 10.34; //to samo co: tree[“height”] = 10.34 var weightPropertyName = 'weight'; tree[weightPropertyName] = 5; //to samo co tree.weight = 5 lub tree['weight'] = 5 Możemy też zdefiniować to wszystko jedną instrukcją za pomocą takiego literału obiektowego: var tree = { type : "oak", height : 10.34, weight : 5 }; Literał obiektowy a JSON © Rule Financial 2011 5
6.
Prototyp Obiekt „dziedziczy”
swój prototyp var x = {}; //dziedziczy z Object.prototype Object.prototype.msg = 'from prototype!'; alert("x: " + x.msg); //from prototype! var y = {}; //również dziedziczy z Object.prototype alert("y: " + y.msg); //from prototype! x.msg = 'overriden!'; alert("x: " + x.msg); //overriden! alert("y: " + y.msg); //from prototype! delete(x.msg); alert("x: " + x.msg); //from prototype! © Rule Financial 2011 6
7.
Tablice Tablica jest
specjalnym typem obiektu (czyli mapy), gdzie kluczami są liczby całkowite W JavaScripcie nie ma tablic takich jak w Javie, opartych o blok pamięci Tablice mają swój własny literał []: var books = []; // pusta tablica books = ['JavaScript in practice', 'UML for the beginners', {name: 'Java tutorial', format: 'ebook'}]; var size = books.lenth; // 3 books[1000] = 'Learn programming in one day'; size = books.length; // 1001 © Rule Financial 2011 7
8.
Funkcje Funkcje są
specjalnymi typami obiektów są więc mapami mogą więc zawierać właściwości jak każdy inny obiekt, a właściwość może być funkcją! Funkcje mogą być wywoływane. W związku z tym mają one dwie specyficzne właściwości: Kod funkcji Kontekst funkcji (w momencie jej wywołania) określający na co wskazują specjalne zmienne „this‟ i „arguments‟, oraz jakie inne zmienne są dostępne © Rule Financial 2011 8
9.
Funkcje Funkcje mają
swój literał: var myFunction = function() { alert('function has been called!'); } Funkcje są mapami, więc mogą mieć atrybuty jak każdy obiekt: myFunction.isCodeComplete = false; Opcjonalnie mogą mieć nazwę (która prawie do niczego nie służy): var myFunction = function myFunction() { … } Zapis instrukcji funkcji: function myFunction() { … } Niemal równoważny zapis z funkcją anonimową (preferowany): var myFunction = function() { … } © Rule Financial 2011 9
10.
Referencja do funkcji
a wywołanie funkcji Funkcja jest dostępna jako zmienna – ta zmienna jest referencją do funkcji var myFunction = function() { return 'result'; } myFunction powyżej jest zmienną będącą referencją do funkcji Można tę referencję przekazać: var myFunctionAlias = myFunction; //myFunctionAlias jest funkcją lub wywołać funkcję i przekazać jej wynik: var myFunctionResult = myFunction(); //myFunctionResult jest łańcuchem „result” © Rule Financial 2011 10
11.
Wzorzec wywołania metody
Funkcja zadeklarowana jaka właściwość obiektu jest nazywana metodą (tego obiektu) var myObject = { name : 'An object', action : function(count) { alert(this.name ? this.name + count : 'no name!'); } } //obiekt myObject ma metodę “action” wzorzec wywołania metody: myObject.action(5); //wyświetla “An object5” więc „this‟ będzie wskazywać na myObject gdy wywołamy funkcję w ten sposób © Rule Financial 2011 11
12.
Wzorzec wywołania funkcji
Weźmy ten sam obiekt: var myObject = { name : 'An object', action : function(count) { alert(this.name ? this.name + count : 'no name!'); } } I zamiast wywoływać funkcję jako metodę: myObject.action(5); zróbmy tak: action(5); // co wyświetli? var x = myObject.action; x(5); // co wyświetli? Jest to wzorzec wywołania funkcji; this wskazuje na obiekt globalny (window) © Rule Financial 2011 12
13.
Wzorzec wywołania funkcji
Czemu to może być problematyczne? Zobaczmy na przykładzie: var messanger = { message: 'hey', printMessage: function() { … var printer = function() { alert(this.message); } printer(); } } messanger.printMessage(); //wyświetla „undefined‟ - dlaczego? Jak to poprawić? © Rule Financial 2011 13
14.
Wzorzec wywołania funkcji
Czemu to może być problematyczne? Zobaczmy na przykładzie: var messanger = { message: 'hey', printMessage: function() { var that = this; var printer = function() { alert(that.message); } printer(); } } messanger.printMessage(); //wyświetla „hey‟ Wskazówka: Używaj that jako aliasu dla this © Rule Financial 2011 14
15.
Wzorzec wywołania konstruktora
Javascript nie posiada konstruktorów jako osobnych funkcji, jak Java Każda funkcja może być konstruktorem jeśli wywołamy ją ze słowem new, i odwrotnie. Jest to niebezpieczne, nie ma w języku żadnej kontroli tego. Dlatego istnieje konwencja: funkcje przeznaczone do wywołania jako konstruktor powinny mieć nazwy zaczynające się wielką literą – wówczas narzędzia są w stanie wykryć błędne użycie. Niepoprawne użycie może dać nieprzewidziane efekty; na przykład funkcja z poprzedniego przykładu użyta jako konstruktor: new messanger.printMessage(); //wyświetla „undefined‟! © Rule Financial 2011 15
16.
Wzorzec zastosowania funkcji
Funkcja jest obiektem który może mieć atrybuty, a atrybut może być funkcją. Czyli funkcje mogą mogę funkcje (metody). Każda funkcja posiada metodę „apply‟ (oraz podobną metodę „call‟). Metoda „apply‟ pobiera dwa parametry, pierwszy oznacza jakie „this‟ ma być użyte, drugi (opcjonalny) to tablica argumentów. W ten sposób możemy „wypożyczać” funkcje: var otherObject = { message: 'another object!'‚ } messanger.printMessage.apply(otherObject); //wyświetla „another object!” © Rule Financial 2011 16
17.
Dostęp do argumentów
funkcji Każda funkcja podczas wywołania ma dostęp do specjalnej zmiennej arguments, która jest pseudo-tablicą zawierającą argumenty wywołania funkcji. To pozwala tworzyć funkcje pobierające zmienną liczbę parametrów, np.: var sum = function() { var i, sum = 0; for (i=0; i < arguments.length; i += 1) { sum += arguments[i]; } return sum; }; alert(sum(1,2,3,4)); //wyświetla 10 © Rule Financial 2011 17
18.
Funkcje – dodatkowe
uwagi Zasięg zmiennej – brak zasięgu blokowego! Każda zmienna ma zasięg obejmujący całą funkcję – bardzo niebezpieczne, bo nieintuicyjne! Brak napisywania metod (method overloading) w JS Zamiast funkcji z wieloma parametrami, preferuj pojedynczy parametr jako tak zwany object specifier: var panel = new Panel({ width : 100, height: 200, title: ‘A title’, background: ‘blue’ }); © Rule Financial 2011 18
19.
Domknięcia (closures) Każda
funkcja wewnętrzna ma dostęp do zmiennych zewnętrznych (oprócz „this‟ i „arguments‟). var counter = function() { var value = 0; return { increment: function(inc) { value += typeof inc === ‘number’ ? inc : 1; }, getValue: function() { return value; } } }(); //uwaga na () ! Domknięcia można wykorzystać do symulacji zmiennych prywatnych lub dziedziczenia © Rule Financial 2011 19
20.
JavaScript - problemy
Zmienna globalne – wystarczy zapomnieć słówka var Brak zasięgu blokowego Podchwytliwe reguły uzupełniania średnika Długa lista nieużywanych zastrzeżonych słów typeof Wiele wartości „pustych”: null, undefined, NaN, empty string, 0, false parseInt == vs === (!= vs !==) Standardowe (wbudowane) funkcje są ograniczone i chaotyczne © Rule Financial 2011 20
Télécharger maintenant