JavaScript .kalla() .applicera () och .bind () – förklaras till en total noob

JavaScript har ett antal inbyggda funktion/metoder som kan gälla för olika datatyper.

precis som .split (””) kan gälla för en sträng, .kalla(), .applicera () och .bind () är metoder för funktioner.

dessa 3 funktioner är alla utformade för att ställa in sammanhang, eller mer specifikt, vad ”detta” refererar till.

För det mesta skulle du alltid definiera ”detta” eller ha det specifikt inkluderat i en funktion., Till exempel kan vi säga att du har ett objekt:

var owen = { name: "Owen"}

och du vill referera till det här objektet med hjälp av en funktion:

function sayTo(person, first, second){ return first + " " + person.name + " " + second;}sayTo(owen, "Hi", "how are you?");
//returns "Hi Owen how are you?"

Nu, om den anropas sayTo-funktionen på Owen, med 2 argument, skulle den anropa korrekt, eftersom

nu, vad händer om sayTo definierades lite annorlunda?

det första argumentet, owen, går till den första variabeln, ”hej” går till den andra variabeln och ”hur mår du?”går ingenstans, och this.name är odefinierad, för det här är inte objektet owen.

det här när du konsoler.,Logga det, returnerar faktiskt det globala fönsterobjektet.

använda .ring()

.call() tillåter sayTo-funktionen att fungera:

notationen är som följer:

functionName.call(value of this, arg1, arg2…)

.call tvingar väsentligen värdet i detta i vilken funktion som helst .samtal tillämpas på. I det här fallet åberopar vi sayTo-funktionen. .call (owen, …) tvingar detta av sayTo () att vara owen objektet. Således this.name är tillämplig.

”Hej” och ”hur mår du?”anges som det andra eller tredje argumentet för sayTo-funktionen (som tar 2 argument).

använda .applicera ()

använda .,applicera () är mycket lik .kalla. Den enda skillnaden är det .call() tar arg1 och arg2 bara en efter en.

för .Ansök () för att arbeta måste argument 1 och 2 anges som en array:

formatet är som följer:

functionName.apply(value of this, )

Observera att arg1 och arg2 anges som en array.

använda .bind()

.bind (), till skillnad från .applicera () och .Ring (), returnerar en funktion istället för ett värde.

.bind() ställer in värdet på detta och ändrar funktionen till en ny funktion, men den anropar inte funktionen.,

var owen = {name: "Owen”}function sayTo(first, second){return first + " " + this.name + " " + second;}var sayToOwen = sayTo.bind(owen);

i huvudsak är sayToOwen skapa som en ny funktion. Vilket är tekniskt:

var sayToOwen = function(first, second){ return first + " " + owen.name + " " + second;}

Du kan sedan köra sayToOwen som en normal funktion.

Du kan också ”binda” argumenten från sayTo() också:

var owen = {name: "Owen”}function sayTo(first, second){return first + " " + this.name + " " + second;}var sayHiToOwen = sayTo.bind(owen, "Hi");

variabeln sayHiToOwen blir då:

var SayHiToOwen = function(second){
return "Hi" + " " + owen.name + " " + second;}

sammanfattning

Leave a Comment