window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Förstå nyckelordet "this" i JavaScript - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2019-09-09
Utveckling av programvara

Förstå nyckelordet "this" i JavaScript

Lukasz Kolko

I de flesta objektorienterade programmeringsspråk har nyckelordet "this" en speciell betydelse. Vanligtvis hänvisar det till objektet som är exekveringskontexten (dvs. till den aktuella instansen av objektet). Vi använder till exempel this när vi refererar till en objektsegenskap inifrån: vi skriver this.propertyName, och då är kontexten objektet och this refererar till det.

'detta' i JavaScript

I JavaScript är det mer komplicerat eftersom där detta hänvisar till beror inte bara på hur funktionen är definierad utan också på hur den anropas.

Ta en titt på hur detta fungerar beroende på invokationsplats och form.

Globalt sammanhang

Används i en global kontext som är bunden till det globala objektet, t.ex. fönster i en webbläsare.

detta; // fönster

Inuti objektmetod

Används inuti en objektmetod som är bunden till det närmast omslutande objektet. Objektet är den nya kontexten för detta nyckelord. Observera att du inte bör ändra funktion () till ES6-syntax fun: () => this.context eftersom det kommer att ändra sammanhanget.

const obj = {
  sammanhang: "objekt",
  fun: funktion() {
    return this.context;
  }
};

obj.fun(); // objekt

I det här exemplet med ett nästlat objekt, detta hänvisar fortfarande till sitt närmaste sammanhang.

const nestedObj = {
  sammanhang: "förälder",
  barn: {
    kontext: "barn",
    fun: funktion() {
      return this.context;
    }
  }
};

nestedObj.child.fun(); // barn

Sammanhangslös funktion

Används i en funktion som inte har någon kontext (har inget objekt som överordnat) som är bunden till den globala kontexten, även om funktionen är defindad i objektet.

Observera att vi använder var sammanhang istället för let/const sammanhang eftersom Låt och konst ändra variabelns inneslutna sammanhang. var är alltid närmast den globala exekveringskontexten. Låt och konst deklarera variabler endast i ett lokalt blockomfång.

var context = "global";

const obj = {
  sammanhang: "objekt",
  funA: funktion() {
    funktion funB() {
      const context = "funktion";
      returnerar this.context;
    }
    return funB(); // anropad utan kontext
  }
};

obj.funA(); // global

Inuti konstruktörsfunktionen

Används i en funktion som är konstruktör för det nya objekt som är bundet till den.

var context = "global";

funktion Obj() {
  this.context = "Obj-kontext";
}

const obj = new Obj();
obj.context; // Obj-kontext

Inre funktion definierad på prototypkedja

Används i en funktion som definieras i prototypkedjan för att skapa ett objekt som är bundet till den.

const ProtoObj = {
  fun: funktion() {
    return this.name;
  }
};

const obj = Object.create(ProtoObj);
obj.name = "foo";
obj.fun(); // foo

Insidan anrop() och apply()-funktioner

anrop() och tillämpa() är JavaScript funktioner. Med hjälp av dessa kan ett objekt använda metoder som tillhör ett annat objekt. anrop() tar argument separat där tillämpa() tar dem som en matris.

detta är här bundet till nya sammanhanget ändras i anrop() och tillämpa() metoder.

const objA = {
  sammanhang: "objA",
  fun: funktion() {
    console.log(this.context, argument);
  }
};

const objB = {
  kontext: "objB"
};

objA.fun(1, 2); // objA, [1, 2]
objA.fun.call(objB, 1, 2, 3); // objB, [1, 2, 3]
objA.fun.apply(objB, [1, 2, 3, 4]); // objB, [1, 2, 3, 4]

Inuti bind()-funktionen

binda() är också en JavaScript-metod. Det skapar en ny funktion som kommer att ha detta sätts till den första parametern som skickas till bind()**.**

const objA = {
  sammanhang: "objA",
  fun: funktion() {
    console.log(this.context, argument);
  }
};

const objB = {
  kontext: "objB"
};

const fun = objA.fun.bind(objB, 1, 2);
fun(3, 4); // objB, [1, 2, 3, 4]

Inuti händelsehanterare

Används i alla händelsehanterare (t.ex, addeventListener, onclick, attachEvent), är den bunden till det DOM-element som händelsen var kopplad till.

document.querySelector(".foo").addEventListener("click", function() {
  this; // hänvisar till div-elementet `foo
});

ES6 pilfunktion

Om den används i pilfunktionen är den alltid bunden till sitt lexikala omfång. I pilfunktionen kan du inte återtilldela detta på något sätt.

const globalArrowFunction = () => this;

globalArrowFunction(); // Fönster

const obj = {
  kontext: "objekt",
  funA: () => detta,
  funB: funktion() {
    return () => {
      returnerar detta.sammanhang;
    };
  }
};

obj.funA(); // fönster
obj.funB()(); // objekt
Fronented-rapport för 2020

Läs mer om detta:

  • De största utmaningarna med kundanpassad mjukvaruutveckling
  • Vad är skillnaden mellan ett mjukvaruföretag och ett IT-bemanningsföretag?

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokala tekniknav

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

    sv_SESwedish
    en_USEnglish de_DEGerman da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek sv_SESwedish