ECMAScript objektskema
- Forrige side Objekttype
- Næste side Definer klasse eller objekt
Funktionsområde refererer til en variabels anvendelsesområde.
Offentlige, private og beskyttede funktionsområder
Koncept
I traditionel objektorienteret programmering fokuserer man hovedsageligt på offentlige og private funktionsområder. Egenskaber i det offentlige funktionsområde kan tilgås fra ydersiden af objektet, hvilket betyder, at efter udvikleren har oprettet en instans af objektet, kan de bruge dens offentlige egenskaber. Egenskaber i det private funktionsområde kan kun tilgås inden for objektet, hvilket betyder, at for verden udenfor eksisterer disse egenskaber ikke. Dette betyder, at hvis en klasse definerer private egenskaber og metoder, kan dens efterkommere ikke tilgå disse egenskaber og metoder.
Beskyttede funktionsområder bruges også til at definere private egenskaber og metoder, men disse egenskaber og metoder kan også tilgås af dattersubklasser.
ECMAScript har kun et offentligt funktionsområde
Det er næsten meningsløst at diskutere disse funktionsområder i ECMAScript, fordi der kun findes én form for funktionsområde i ECMAScript - det offentlige funktionsområde. Alle objekter i ECMAScript har offentlige egenskaber og metoder. Derfor skal du være meget opmærksom, når du definerer egne klasser og objekter. Husk, at alle egenskaber og metoder er offentlige som standard!
Foreslået løsning
Mange udviklere har foreslået effektive egenskabsfunktioner online, der løser dette problem med ECMAScript.
På grund af manglen på en privat funktionsområde har udvikleren fastsat en konvention om, hvilke egenskaber og metoder, der skal betragtes som private. Denne konvention bestemmer, at der skal tilføjes understregen før og efter egenskaberne:
obj._color_ = "blue";
Dette kodesegmentet har egenskaben 'color' som privat. Bemærk, understregen ændrer ikke egenskabens status som offentlig, den fortæller bare andre udviklere, at de bør betragte egenskaben som privat.
Nogle udviklere foretrækker også at bruge enkeltunderstregning for at indikere private medlemmer, f.eks.: obj._color。
Statisk område
Egenskaber og metoder defineret ved statisk område kan tilgås fra samme sted til enhver tid. I Java kan en klasse have egenskaber og metoder, uden at der skal instansieres et objekt af klassen, for at få adgang til disse egenskaber og metoder, f.eks. java.net.URLEncoder-klassen, hvor funktionen encode() er en statisk metode.
ECMAScript har ikke et statisk område
Strikt taget har ECMAScript ikke en statisk område. Men det kan give konstruktøren egenskaber og metoder. Husker du, at konstruktøren bare er en funktion. En funktion er et objekt, og objekter kan have egenskaber og metoder. For eksempel:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); //Udskriver "hello" sayHello.alternate(); //Udskriver "hi"
Her er metoden alternate() faktisk en metode for funktionen sayHello. Man kan kalde sayHello() som en almindelig funktion for at udskrive "hello", eller kalde sayHello.alternate() for at udskrive "hi". Selvom alternate() også er en metode i sayHello()s offentlige område, er den ikke en statisk metode.
Nøgleordet this
Funktionen for this
En af de vigtigste koncepter at mestre i ECMAScript er brugen af nøgleordet this, som bruges i objektets metoder. Nøgleordet this peger altid på objektet, der kalder metoden, f.eks.:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); //Udskriver "red"
I ovenstående kode bruges nøgleordet this i objektets showColor() metode. I dette miljø er this lig med oCar. Nedenstående kode fungerer på samme måde som ovenstående kode:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); //Udskriver "red"
Årsagen til at bruge this
Hvorfor bruge this? Fordi når objekter instansieres, kan udviklere ikke altid bestemme hvilket variabelnavn der vil blive brugt. Brug af this gør det muligt at genbruge den samme funktion flere steder. Tænk på nedenstående eksempel:
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //udskriver 'red' oCar2.showColor(); //udskriver 'blue'
I den ovenstående kode defineres funktionen showColor() med this først, og derefter oprettes to objekter (oCar1 og oCar2), hvor en objekts egenskab 'color' sættes til 'red', og den anden objekts egenskab 'color' sættes til 'blue'. Begge objekter tildeles egenskaben showColor, der peger på den oprindelige showColor () -funktion (bemærk, at der ikke er nogen navneproblemer her, da en er en global funktion, og den anden er en objekt egenskab). Kald showColor() for hvert objekt, og outputtet for oCar1 er 'red', mens outputtet for oCar2 er 'blue'. Dette skyldes, at når showColor() kaldes for oCar1, er this-nøgleordet i funktionen lig oCar1. Når showColor() kaldes for oCar2, er this-nøgleordet i funktionen lig oCar2.
Bemærk, når du refererer til egenskaber på et objekt, skal du bruge this-nøgleordet. For eksempel kan showColor() -metoden ikke køre, hvis du bruger følgende kode:
function showColor() { alert(color); };
Hvis du ikke bruger objekt eller this-nøgleord til at referere til variabler, betragter ECMAScript dem som lokale eller globale variabler. Derefter vil funktionen søge efter en lokal eller global variabel med navnet 'color', men vil ikke finde den. Hvordan vil det gå? Funktionen vil vise 'null' i en advarsel.
- Forrige side Objekttype
- Næste side Definer klasse eller objekt