JavaScript har en rekke innebygde funksjoner/metoder som kan gjelde for ulike typer data.
Akkurat som .split(«») kan gjelde en streng, .anrop(), .utfør() og .bind() er metoder for funksjoner.
Disse 3 funksjoner er utformet for å angi SAMMENHENG, eller mer spesifikt, hva «dette» viser til.
de Fleste av tiden, ville du alltid definere «dette» eller har det spesielt er inkludert i en funksjon., For eksempel, la oss si at du har et objekt:
var owen = { name: "Owen"}
Og du vil referere til dette objektet ved hjelp av en funksjon:
function sayTo(person, first, second){ return first + " " + person.name + " " + second;}sayTo(owen, "Hi", "how are you?");
//returns "Hi Owen how are you?"
Nå, hvis det er påberopt den sayTo funksjon på Owen, med 2 argumenter, det vil fokusere på riktig måte, fordi
Nå, hva om sayTo ble definert en litt annerledes?
Det første argumentet, owen, går til den første variabelen, «hei» går til den andre variabelen, og «hvor er du?»går ingen steder, og dette.navnet er udefinert, fordi dette er IKKE gjenstand owen.
dette når du konsollen.,logg deg det, faktisk returnerer den globale vinduet objektet.
ved Hjelp av .anrop()
.anrop (ringe), kan sayTo til å virke:
notasjonen er som følger:
functionName.call(value of this, arg1, arg2…)
.ring i hovedsak styrker verdien i dette i et hvilket som helst funksjon .samtalen blir brukt på. I dette tilfellet, kan vi påberope sayTo funksjon. .ring(owen, …) styrker dette av sayTo() for å være owen objekt. Dermed dette.navnet er aktuelt.
«Hei» og «hvordan har du det?»er lagt inn i den andre eller tredje argument av sayTo funksjon (noe som tar 2 argumenter).
ved Hjelp av .utfør()
ved Hjelp av .,utfør() er svært lik .anrop. Den eneste forskjellen er at .anrop() tar arg1 og arg2 bare en etter en.
For .utfør() til å fungere, argumenter 1 og 2 må være angitt som en matrise:
formatet er som følger:
functionName.apply(value of this, )
legg Merke til at arg1 og arg2 er lagt inn som en matrise.
ved Hjelp av .bind()
.bind(), i motsetning til .utfør() og .anrop(), returnerer en funksjon i stedet for en verdi.
.bind() angir verdien av dette, og endringer i funksjonen til en ny funksjon, men det betyr ikke påberope funksjonen.,
var owen = {name: "Owen”}function sayTo(first, second){return first + " " + this.name + " " + second;}var sayToOwen = sayTo.bind(owen);
Egentlig, sayToOwen er lager som en ny funksjon. Som er techincally:
var sayToOwen = function(first, second){ return first + " " + owen.name + " " + second;}
Du kan deretter kjøre sayToOwen som en normal funksjon.
Du kan også «binde» argumenter sayTo() så godt:
var owen = {name: "Owen”}function sayTo(first, second){return first + " " + this.name + " " + second;}var sayHiToOwen = sayTo.bind(owen, "Hi");
variabelen sayHiToOwen blir da:
var SayHiToOwen = function(second){
return "Hi" + " " + owen.name + " " + second;}
Oppsummering