Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
ECMAScript - Wikipedia, wolna encyklopedia

ECMAScript

Z Wikipedii

ECMAScript - ustandaryzowane przez ECMA kluczowe elementy obiektowego skryptowego języka programowania JavaScript. Specyfikacja ta oznaczona jest jako ECMA-262.

ECMA-262 definiuje samą semantykę języka oraz niektóre podstawowe typy danych (String, Boolean, Number, Object itp.) i obiekty (np. Math, Array). Elementy takie jak model dokumentu lub specjalistyczne funkcje wejścia-wyjścia, obsługi GUI itp. nie wchodzą w skład specyfikacji ECMAScript, definiowane są przez inne standardy (W3C DOM) lub samych autorów konkretnych implementacji.

Zob. JavaScript by uzyskać więcej informacji na temat różnic między teoretyczną specyfikacją ECMAScript a jej faktycznymi implementacjami.

Spis treści

[edytuj] Podstawowe elementy składni wersji 3

[edytuj] Komentarze

Komentarze w skryptach ECMAScriptu umieszcza się w sposób identyczny jak w C++. Komentarz blokowy umieszcza się między sekwencją znaków "/*" a "*/", komentarz liniowy rozpoczyna się sekwencją "//" a kończy znakiem końca linii:

/* To jest komentarz
  blokowy. Zajmuje on
  kilka linii */

// to jest komentarz liniowy

[edytuj] Zmienne

Zmienne są typowane dynamicznie. Definiowanie zmiennej polega na zwykłym przypisaniu jej wartości lub skorzystaniu z instrukcji var. Zmienne zdefiniowane poza funkcjami są dostępne w zasięgu globalnym (widoczne dla całego skryptu).

[edytuj] Instrukcje sterujące

Podstawowe instrukcje są identyczne z instrukcjami znanymi z języków Java i C++.

[edytuj] Instrukcja if

if (warunki) {
    instrukcje;
}
else {
    instrukcje;
}

[edytuj] Pętla while

while (warunki) {
    instrukcje;
}

[edytuj] Pętla do...while

do {
    instrukcje
} while (warunki);

[edytuj] Pętla for

for ([instrukcje-początkowe]; [warunki]; [instrukcje-krokowe]) {
    instrukcje-środkowe;
}

[edytuj] Pętla for...in

Pętla ta przechodzi przez wszystkie pola danego obiektu (w tym elementy tablicy):

for (własność in obiekt) {
    instrukcje;
}

Jest to instrukcja, która nie występuje w C++ ani w Javie (stosowny odpowiednik pojawił się dopiero w wersji JDK 1.5) natomiast jest dostępna w Borland Deplhi 2005. W PHP5 jej odpowiednikiem jest instrukcja foreach (w PHP4 umożliwiała jedynie iterację po tablicy).

[edytuj] Instrukcja switch

Tak samo jak w C, C++, PHP i Javie.

switch (wyrażenie) {
    case wartość1:
        instrukcje;
        break;
    case wartość2:
        instrukcje;
        break;
    default:
        instrukcje;
        break;
}

[edytuj] Obiekty

W ECMAScripcie wszystko jest obiektem. Podstawowym obiektem jest Object. Standard ECMA opisuje także obiekty Array (tablica), String (ciąg znaków), Number (liczba całkowita lub rzeczywista), Boolean (wartość logiczna), Function (funkcja ECMAScriptu), Date (data) i Math (operacje matematyczne).

[edytuj] Dostęp do pól i metod

Obiekty ECMAScriptu są tablicami asocjacyjnymi. Dostęp do pól obiektów jest możliwy przy użyciu dwóch równoważnych notacji: obiekt.pole i obiekt["pole"]. Trzecią możliwością (aczkolwiek w większości wypadków - niewygodną) jest skorzystanie z numeru danego pola: obiekt[1].

Ponieważ metody obiektu (funkcje) są jego polami, także do nich dostęp jest możliwy przy użyciu zarówno notacji z kropką, jak i notacji z nawiasami kwadratowymi. Poniższe dwie linie kodu są zatem równoważne:

  m.metoda1();
  m["metoda1"]();

Obie notacje z nawiasami kwadratowymi zwyczajowo stosuje się jednak przy korzystaniu z tablic powstałych jako obiekt Array.

Dostęp do pól i metod obiektu ułatwia instrukcja wiążąca "with". Poniższe konstrukcje są równoważne:

obiekt.pole1=wartość;
obiekt.pole2=wartość;

i

with (obiekt)
{ pole1=wartość;
  pole2=wartość;
}

[edytuj] Definiowanie własnego obiektu

Aby zdefiniować własny obiekt wystarczy utworzyć funkcję konstruktora:

// funkcja konstruktora
function MojObiekt(poleA, poleB) {
  this.poleA = poleA;
  this.poleB = poleB;

  function _metoda1() {
    alert("mojObiekt::metoda1()");
  }
  this.metoda1 = _metoda1;

  function _metoda2() {
    alert("mojObiekt::metoda2()");
  }
  this.metoda2 = _metoda2;

}

Dalsza część opisu mówi o "klasach", mimo że w przypadku ECMAScriptu 1.x pojęcie "klasy" jest nieformalne. "Klasa" oznacza tutaj zbiór obiektów utworzonych przy użyciu tego samego konstruktora.

Aby utworzyć instancję klasy MojObiekt, należy skorzystać z operatora new:

  var m = new MojObiekt(2, 3);

Podobnie jak w Javie, nowe obiekty w ECMAScripcie tworzone są na stercie. W przypadku kiedy do danego obiektu nie istnieje już żadna referencja mechanizm garbage collectora usuwa dany obiekt z pamięci.

[edytuj] Funkcje

Funkcje w ECMAScripcie definiujemy przy użyciu słowa kluczowego function, a jej argumenty podajemy w nawiasach:

function dodajDwieLiczby(a, b) {
  return a+b;
}

Funkcje są jednocześnie obiektami typu Function. Obiekt ten ma konstruktor przyjmujący jako argument ciąg znaków, powyższą funkcję można więc także zdefiniować w sposób następujący:

dodajDwieLiczby = new Function("a", "b", "return a+b;");

Ostatni argument Function() jest treścią kodu funkcji, pozostałe to nazwy parametrów. Ten sposób tworzenia funkcji bywa jednak mało wydajny.

Podobny sposób na deklarowanie funkcji:

dodajDwieLiczby = function(a, b) {
  return a+b;
}

W przeciwieństwie do Javy ECMAScript pozwala także operować na referencjach do funkcji:

  function dodaj(a,b) {
    alert(a+b);
  }

  function odejmij(a,b) {
    alert(a-b);
  }

  var g = dodaj;

  g(7,3); // wyświetla "10"

  g = odejmij;

  g(7,3); // wyświetla "4"

[edytuj] Dziedziczenie

W implementacjach ECMAScript V3 dziedziczenie realizowane jest przez prototypy. Jeśli chcemy utworzyć klasę Pochodna dziedziczącą po klasie Bazowa, ustawiamy pole Pochodna.prototype na nową instancję klasy Bazowa:

  function Bazowa() {
    this.metodaA = function() {
      alert("Bazowa::A()");
    }
    this.metodaB = function() {
      alert("Bazowa::B()");
    }
  }

  function Pochodna() {
    // metodaB przeciąża odpowiednią metodę z klasy Bazowa:
    this.metodaB = function () {
      alert("Pochodna::B()");
    }
  }
  Pochodna.prototype = new Bazowa();

  x = new Bazowa();
  y = new Pochodna();

  x.metodaA(); // wyświetla: "Bazowa::A()"
  y.metodaA(); // wyświetla: "Bazowa::A()"
  x.metodaB(); // wyświetla: "Bazowa::B()"
  y.metodaB(); // wyświetla: "Pochodna::B()"

Istnieją inne sposoby na uzyskanie dziedziczenia w ECMAScripcie. Osoby przyzwyczajone do Javy lub C++ mogą zmodyfikować prototyp obiektu Object w następujący sposób:

  Object.prototype.extending = function (supClass) {
    tempObj = new supClass();
    for (property in tempObj) {
        this[property] = tempObj[property];       
    } 
  };

by później w funkcjach konstruktora korzystać z metody extending(), rozwiązującej szybko problem dziedziczenia (używamy nazwy "extending" zamiast "extends", gdyż to drugie słowo jest słowem zastrzeżonym w ECMAScripcie). Oto przykład:

  function Bazowa() {

    this.value = 5;
    
    this.metoda1 = function () {
        alert("Bazowa::metoda1() " + this.value);
    }
    
    this.metoda2 = function () {
        alert("Bazowa::metoda2()");
    }
    
  }

  function Pochodna() {
    this.extending(Bazowa);
    
    this.metoda1 = function () {
        alert("Pochodna::metoda1() " + this.value);
    }
  }

Ważne tylko, żeby extending() wywoływać jako pierwszą instrukcję w konstruktorze.


[edytuj] Obsługa wyjątków

Do obsługi wyjątków w ECMAScript wykorzystywana jest "klasa" Error, odpowiadająca znanej z Javy klasie Exception.

Aby wyrzucić nowy wyjątek, należy skorzystać z instrukcji throw:

  function zrobCos() {
    throw new Error("Komunikat wyjątku");
  }

Aby obsłużyć wyjątek, należy zastosować konstrukcję try...catch...finally (przy czym finally jest opcjonalne):

  try {
    zrobCos();
  } catch (wyjatek) {
    alert("Nastąpił wyjątek: " + wyjatek.toString());
  } finally {
    posprzataj();
  }
  ...
  throw("nastapil blad");

[edytuj] Linki zewnętrzne

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com