Fie că îţi place fie că nu Javascriptul ( cunoscut şi sub denumirea de ECMA Script ) este cel mai folosit limbaj de programare de pe glob. Nu cred că cei de la Netscape s-au aşteptat la aşa ceva când au cerut ca limbajul să fie din proiectare cu hibe. Şi nici nu se aştepta restul lumii ca Microsoft să copieze limbajul aşa de bine încât în loc să repare hibele a reuşit să le păstreze chiar şi in varianta lor denumită JScript.
Cu toate astea aproape orice aplicaţie care poate fi scrisă în Javascript va fi scrisă în Javascript. Avem astăzi editoare de text atât pentru programare cât şi clone ale lui Word, Excel şi Powerpoint, avem chiar şi IDE-uri scrise în Javascript ( bespin, coderun), se scriu o mulţime de jocuri mai nou graţie HTML5 şi a etichetei canvas, ba mai mult poţi face chiar şi playere pentru stream-uri video.
Ţinând cont de toate câte poţi face în Javascript cred că merită să îţi zic câteva aspecte de bază ale limbajului.
1. Funcţia este cetăţean de prim rang
În limbajele orientate obiect cetăţeanul de rang întâi era clasa. O clasă printre altele permite încapsularea datelor. Sa privim puţin o funcţie javascript.
Code Snippet
- function Person() {
- var Name = "Name";
- var Surname = "Surname"
- }
Funcţia Person are două atribute, primul fiind Name, iar al doilea fiind Surname.
Ce am scris noi anterior Javascript interpretează în felul următor:
Code Snippet
- function Person() {
- var Name = "Name";
- var Surname = "Surname";
-
- return this;
- }
Asta înseamnă că orice scriem noi într-o funcţie este public. Daca ar fi să foloseşti funcţia ai face-o probabil în felul următor:
Code Snippet
-
- var me = new Person();
- me.Name = "Mihai";
- me.Surname = "Lazar";
Minunat. Acum ştiind cum interpretează Javascriptul o funcţie, hai să vedem cum declarăm un obiect ( a se citi dicţionar de valori ).
Un dicţionar în javascript arată cam aşa
Code Snippet
- {
- name: "Name",
- surname: "Surname
- }
Evident dacă vrem să îl mai folosim putem sa zicem var numeVariabila = { name: “Name”, surname: “Surname” }.
Partea interesantă cu dicţionarele este că putem avea o proprietate căreia să îi asignăm o funcţie.
Putem practic folosi aşa ceva
Code Snippet
- var AnotherPerson = {
- name: "Name",
- surname: "Surname",
- sayHi: function(){
- alert( "Hi, " +this.name + " " + this.surname );
- }
- }
-
- AnotherPerson.sayHi()
ATENŢIE! Poţi asigna unei variabile un dicţionar. Nu te opreşte nimeni. Dar nu poţi iniţializa un dicţionar cu new.
2. Încapsularea datelor
Ai văzut cum scrii o funcţie. Ai văzut cum faci un dicţionar. Ia să vezi cum încapsulezi datele.
Code Snippet
- function Person() {
- var name = "Name";
- var surname = "Surname";
-
- function privateAccessOnly() {
- return this.name + " " + this.surname;
- }
-
- return {
- sayHi: function () {
- alert("Hi, " + privateAccessOnly() );
- }
- }
- }
Suuper! Tot ce a trebuit să faci era să returnezi un dicţionar în locul obiectului this care se referă la funcţie. Acum nimeni nu va putea asigna valori proprietăţi name şi surname.
Tot ce poate face este să apeleze metoda sayHi
Code Snippet
- var me = new Person();
- me.sayHi();
Ăsta este în mare şpilu cu Javascript. Există totuşi alte chiţibuşuri de care trebuie să ţii cont. De exemplu în Javascript este obligatoriu să scrii { în dreptul funcţiei sau în cazul return { . De ce ? Pentru că e foarte posibil ca în cazul în care nu o faci să păţeşti ceva de genul.
Code Snippet
- function Person() {
- var name = "Name";
- var surname = "Surname";
-
- function privateAccessOnly() {
- return this.name + " " + this.surname;
- }
-
- return;
- {
- sayHi: function () {
- alert("Hi, " + privateAccessOnly() );
- }
- }
- }
Şi vei sta uitându-te la cod şi nu vei înţelege de ce nu merge exemplul. Pai javascriptul ţi-a pus ‘;’ după return.
Ce nu am atins în discuţia noastră este modelul de extensie bazat pe prototipuri spre deosebire de moştenire în limbajele obiectuale. De asemenea mai rămâne să vedem cu se face un closure şi ceva exemple mai distractive. Dar asta altă dată. Cine ştie poate mi-o iei în faţă şi prezinţi chiar tu câteva aspecte interesante ale Javascript-ului.
Posted
Tue, May 4 2010 7:45 AM
by
Mihai Lazar