window.pipedriveLeadboosterConfig = { base: pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on jo olemassa') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Avainsanan 'this' ymmärtäminen JavaScript - The Codest:ssä.
Codest
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Toimialat
    • Fintech & pankkitoiminta
    • E-commerce
    • Adtech
    • Terveysteknologia
    • Valmistus
    • Logistiikka
    • Autoteollisuus
    • IOT
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
Takaisin nuoli PALAA TAAKSE
2019-09-09
Ohjelmistokehitys

Avainsanan 'this' ymmärtäminen JavaScript:ssä

Lukasz Kolko

Useimmissa oliokeskeisissä ohjelmointikielissä avainsanalla 'this' on erityinen merkitys. Yleensä se viittaa suorituskontekstissa olevaan objektiin (eli objektin nykyiseen instanssiin). Käytämme tätä esimerkiksi silloin, kun viittaamme objektin ominaisuuteen sisältä käsin: kirjoitamme this.propertyName, jolloin konteksti on objekti ja this viittaa siihen.

'tämä' JavaScript:ssä

Osoitteessa JavaScript se on monimutkaisempi, koska jos tämä viittaa, riippuu paitsi siitä, miten funktio on määritelty, myös siitä, missä muodossa sitä kutsutaan.

Katso miten tämä toimii riippuen kutsun paikasta ja muodosta.

Maailmanlaajuinen konteksti

Käytetään globaalissa kontekstissa, joka on sidottu globaaliin objektiin, kuten esim. ikkuna verkkoselaimessa.

this; // ikkuna

Sisällä objektimenetelmä

Käytetään objektimenetelmän sisällä, joka on sidottu lähimpään ympäröivään objektiin. Objekti on uusi konteksti tämä avainsana. Huomaa, että sinun ei pitäisi muuttaa funktio () ES6-syntaksiin fun: () => this.context koska se muuttaa asiayhteyttä.

const obj = {
  context: "object",
  fun: function() {
    return this.context;
  }
};

obj.fun(); // object

Tässä esimerkissä sisäkkäisen objektin kanssa, tämä viittaa edelleen lähimpään asiayhteyteen.

const nestedObj = {
  context: "parent",
  child: {
    context: "child",
    fun: function() {
      return this.context;
    }
  }
};

nestedObj.child.fun(); // lapsi

Kontekstiton toiminto

Käytetään funktion sisällä, jolla ei ole kontekstia (jolla ei ole objektia vanhempana), joka on sidottu globaaliin kontekstiin, vaikka funktio olisi määritelty objektin sisällä.

Huomaa, että käytämme var context sen sijaan, että let/const context koska anna ja const muuttaa muuttujan sisältämää kontekstia. var on aina lähimpänä globaalia suorituskontekstia. anna ja const ilmoittaa muuttujia vain paikallisessa lohkon laajuudessa.

var context = "global";

const obj = {
  context: "object",
  funA: function() {
    function funB() {
      const context = "function";
      return this.context;
    }
    return funB(); // kutsutaan ilman kontekstia.
  }
};

obj.funA(); // globaali

Konstruktorifunktion sisällä

Käytetään funktion sisällä, joka on siihen sidotun uuden objektin konstruktori.

var context = "global";

function Obj() {
  this.context = "Obj-konteksti";
}

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

Prototyyppiketjussa määritellyn funktion sisällä

Käytetään prototyyppiketjussa määritellyn funktion sisällä luodakseen siihen sidotun objektin.

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

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

Sisällä call() ja apply() -funktiot

call() ja apply() ovat JavaScript toiminnot. Niiden avulla objekti voi käyttää toisen objektin metodeja. call() ottaa argumentit erikseen, kun apply() ottaa ne matriisina.

tämä on tässä yhteydessä sidottu uuteen kontekstiin, joka on muutettu call() ja apply() menetelmät.

const objA = {
  context: "objA",
  fun: function() {
    console.log(this.context, arguments);
  }
};

const objB = {
  context: "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]

Sisällä bind()-funktiossa

bind() on myös JavaScript-menetelmä. Se luo uuden funktion, jolla on tämä asetetaan ensimmäiseksi parametriksi, joka on toimitettu bind()**.**

const objA = {
  context: "objA",
  fun: function() {
    console.log(this.context, arguments);
  }
};

const objB = {
  context: "objB"
};

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

Tapahtumakäsittelijöiden sisällä

Käytetään missä tahansa tapahtumankäsittelijässä (esim, addeventListener, onclick, attachEvent), se sidotaan DOM-elementtiin, johon tapahtuma oli liitetty.

document.querySelector(".foo").addEventListener("click", function() {
  this; // viittaa div-elementtiin `foo`.
});

ES6 nuolifunktio

Jos sitä käytetään nuolifunktion sisällä, se on aina sidottu sen leksikaaliseen laajuuteen. Nuolifunktiossa et voi määrittää uudelleen funktiota tämä millään tavalla.

const globalArrowFunction = () => this;

globalArrowFunction(); // Ikkuna

const obj = {
  context: "object",
  funA: () => this,
  funB: function() {
    return () => {
      return this.context;
    };
  }
};

obj.funA(); // Window
obj.funB()(); // objekti
Fronented-raportti vuodeksi 2020

Lue lisää:

  • Räätälöityjen ohjelmistojen kehittämisen suurimmat haasteet
  • Mitä eroja on ohjelmistotalon ja IT-henkilöstöpalveluyrityksen välillä?

Aiheeseen liittyvät artikkelit

Ohjelmistokehitys

Tulevaisuuden web-sovellusten rakentaminen: The Codest:n asiantuntijatiimin näkemyksiä

Tutustu siihen, miten The Codest loistaa skaalautuvien, interaktiivisten verkkosovellusten luomisessa huipputeknologian avulla ja tarjoaa saumattomia käyttäjäkokemuksia kaikilla alustoilla. Lue, miten asiantuntemuksemme edistää digitaalista muutosta ja liiketoimintaa...

THECODEST
Ohjelmistokehitys

Top 10 Latviassa toimivaa ohjelmistokehitysyritystä

Tutustu Latvian parhaisiin ohjelmistokehitysyrityksiin ja niiden innovatiivisiin ratkaisuihin uusimmassa artikkelissamme. Tutustu siihen, miten nämä teknologiajohtajat voivat auttaa nostamaan liiketoimintaasi.

thecodest
Yritys- ja skaalausratkaisut

Java-ohjelmistokehityksen perusteet: A Guide to Outsourcing Successfully

Tutustu tähän keskeiseen oppaaseen Java-ohjelmistokehityksen onnistuneesta ulkoistamisesta tehokkuuden parantamiseksi, asiantuntemuksen saamiseksi ja projektin onnistumiseksi The Codestin avulla.

thecodest
Ohjelmistokehitys

Perimmäinen opas ulkoistamiseen Puolassa

Ulkoistamisen lisääntyminen Puolassa johtuu taloudellisesta, koulutuksellisesta ja teknologisesta kehityksestä, joka edistää tietotekniikan kasvua ja yritysystävällistä ilmapiiriä.

TheCodest
Yritys- ja skaalausratkaisut

Täydellinen opas IT-tarkastustyökaluihin ja -tekniikoihin

Tietotekniikan tarkastuksilla varmistetaan turvalliset, tehokkaat ja vaatimustenmukaiset järjestelmät. Lue lisää niiden merkityksestä lukemalla koko artikkeli.

Codest
Jakub Jakubowicz teknologiajohtaja ja toinen perustaja

Tilaa tietopankkimme ja pysy ajan tasalla IT-alan asiantuntemuksesta.

    Tietoa meistä

    The Codest - Kansainvälinen ohjelmistokehitysyritys, jolla on teknologiakeskuksia Puolassa.

    Yhdistynyt kuningaskunta - pääkonttori

    • Toimisto 303B, 182-184 High Street North E6 2JA
      Lontoo, Englanti

    Puola - Paikalliset teknologiakeskukset

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsova, Puola

      Codest

    • Etusivu
    • Tietoa meistä
    • Palvelut
    • Tapaustutkimukset
    • Tiedä miten
    • Työurat
    • Sanakirja

      Palvelut

    • Se neuvoa-antava
    • Ohjelmistokehitys
    • Backend-kehitys
    • Frontend-kehitys
    • Staff Augmentation
    • Backend-kehittäjät
    • Pilvi-insinöörit
    • Tietoinsinöörit
    • Muut
    • QA insinöörit

      Resurssit

    • Faktoja ja myyttejä yhteistyöstä ulkoisen ohjelmistokehityskumppanin kanssa
    • Yhdysvalloista Eurooppaan: Miksi amerikkalaiset startup-yritykset päättävät muuttaa Eurooppaan?
    • Tech Offshore -kehityskeskusten vertailu: Tech Offshore Eurooppa (Puola), ASEAN (Filippiinit), Euraasia (Turkki).
    • Mitkä ovat teknologiajohtajien ja tietohallintojohtajien tärkeimmät haasteet?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Verkkosivuston käyttöehdot

    Tekijänoikeus © 2025 by The Codest. Kaikki oikeudet pidätetään.

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