Ved å bruke den innebygde Object () -konstruktørfunksjonen, kan vi lage generiske tomme objekter på fluen. Faktisk, hvis du husker tilbake til begynnelsen av kapittel 1, er dette akkurat det vi gjorde ved å lage cody-objektet. Lar gjenopprette cody-objektet.
Eksempel: sample69.html
Her er alt vi gjør, bruker Gjenstand()
constructor funksjon for å lage et generisk objekt kalt cody. Du kan tenke på Gjenstand()
konstruktør som kakeskytter for å lage tomme objekter som ikke har forhåndsdefinerte egenskaper eller metoder (unntatt selvfølgelig de som er arvet fra prototypekjeden).
Hvis det ikke er klart, er det Gjenstand()
Konstruktøren er en gjenstand selv. Det vil si at konstruktørfunksjonen er basert på et objekt opprettet fra Funksjon
konstruktør. Dette kan være forvirrende. Bare husk det som Array
konstruktør, Gjenstand
Konstruktøren spretter bare tomme gjenstander. Og ja, du kan lage alle de tomme objekter du liker. Men å lage en tom gjenstand som cody er veldig annerledes enn å lage din egen konstruktørfunksjon med forhåndsdefinerte egenskaper. Pass på at du forstår at cody er bare en tom gjenstand basert på Gjenstand()
konstruktør. For å virkelig utnytte kraften til JavaScript, må du lære ikke bare hvordan du lager tomme objektbeholdere fra Gjenstand()
, men også hvordan du bygger din egen "klasse" av objekter (Person()
) som Gjenstand()
konstruktørfunksjonen selv.
Gjenstand()
parametereDe Gjenstand()
Konstruktørfunksjonen tar en valgfri parameter. Den parameteren er verdien du vil lage. Hvis du ikke oppgir noen parameter, så a null
eller udefinert
verdien vil antas.
Eksempel: sample70.html
Hvis en verdi dessuten null
eller udefinert
er sendt til Gjenstand
konstruktør, vil verdien som er bestått, bli opprettet som et objekt. Så teoretisk kan vi bruke Gjenstand()
konstruktør for å lage noen av de andre innfødte gjenstandene som har en konstruktør. I det neste eksemplet gjør jeg nettopp det.
Eksempel: sample71.html
Gjenstand()
Egenskaper og metoderDe Gjenstand()
objektet har følgende egenskaper (ikke inkludert arvede egenskaper og metoder):
Eiendommer (Object.prototype;
):
prototype
Gjenstand()
Instansegenskaper og metoderGjenstand()
Objektinstanser har følgende egenskaper og metoder (inkluderer ikke arvede egenskaper og metoder):
Instansegenskaper (var myObject = ;
myObject.constructor;
):
konstruktør
Instansmetoder (var myObject = ;
myObject.toString ();
):
hasOwnProperty ()
isPrototypeOf ()
propertyIsEnumerable ()
toLocaleString ()
toString ()
verdien av()
Prototypekjeden slutter med Object.prototype
, og dermed alle egenskapene og metodene til Gjenstand()
er arvet av alle JavaScript-objekter.
Gjenstand()
Objekter ved hjelp av "Object Literals"Å skape en "objekt-bokstavelig" innebærer å instantiere et objekt med eller uten egenskaper ved hjelp av seler (var cody = ;
). Husk i begynnelsen av kapittel 1 når vi opprettet den endelige cody-objekten og deretter ga cody-objektegenskapene ved hjelp av punktnotasjon? La oss gjøre det igjen.
Eksempel: sample72.html
Legg merke til i koden som lager cody
objekt og dets egenskaper tok fem uttalelser. Ved å bruke objektets bokstavelige notasjon kan vi uttrykke det samme cody
objekt i en uttalelse.
Eksempel: sample73.html
Ved å bruke bokstavelig notasjon gir vi muligheten til å lage objekter, inkludert definerte egenskaper, med mindre kode og innkapsling av relaterte data visuelt. Legg merke til bruken av :
og ,
operatører i en enkelt setning. Dette er faktisk den foretrukne syntaksen for å lage objekter i JavaScript på grunn av dens terseness og lesbarhet.
Du bør være oppmerksom på at eiendomsnavn også kan angis som strenge:
Eksempel: sample74.html
Det er ikke nødvendig å spesifisere egenskaper som strenger med mindre eiendommens navn:
klasse
).Forsiktig! Den siste egenskapen til et objekt burde ikke ha et etterfølgende komma. Dette vil forårsake en feil i enkelte JavaScript-miljøer.
Object.prototype
De Gjenstand()
Konstruktørfunksjonen i JavaScript er spesiell, som sin prototype
Egenskapen er den siste stopp i prototypekjeden.
I den følgende prøven forstørrer jeg Object.prototype
med en foo
eiendom og deretter opprette en streng og forsøke å få tilgang til foo
egenskap som om det var en egenskap av strengeksemplet. Siden myString
forekomsten har ikke en foo
eiendom, prototype kjeden sparker inn og verdien er søkt på String.prototype
. Det er ikke der, så det neste stedet å se er Object.prototype
, som er den endelige plasseringen JavaScript vil se etter en objektverdi. De foo
verdien er funnet fordi jeg la den til, og dermed returnerer verdien av foo
.
Eksempel: sample75.html
Forsiktig! Alt lagt til Object.prototype
vil dukke opp i en for i
loop og prototype kjeden. På grunn av dette er det sagt at det endres Object.prototype
er forbudt.