JSFiddle - React, Tailwind, and code Playground

daniel.steigerwald.cz

JavaScript

// http://daniel.steigerwald.cz (MIT Licensed)

// jednoduchá funkce, vrací svůj kontext
var getContext = function() {
    return this;
}

// true, protože 'this' je globální objekt 'window'
alert(getContext() == window);

// vezmeme tu samou funkci, a přiřadíme ji k objektu 'myObj'
var myObj = {
    getContext: getContext,
    // přepíšeme 'toString'
    toString: function() {
        return 'kontext je myObj';
    }
};

alert(myObj.getContext());
// tečková notace říká, odkud si funkce má kontext vzít

// vytvoříme jiný objekt
var anotherObj = {
    toString: function() {
        return 'kontext je anotherObj';
    }
};

// pomocí klíčového slova 'call' můžeme kontext funkci vnutit, navzdory tečkové notaci
var result = myObj.getContext.call(anotherObj);
alert(result);

// pozor, předáváme-li funkci nějaké jiné funkci, kontext se nepřenáší!
var alertContext = function(fn) {
    var result = fn();
    // true, protože navzdory tečkové notaci, předána byla pouze samotná funkce
    alert(result != myObj);
    // true, protože result je window
    alert(result == window);
}

// všimněte si chybějících závorek, funkce se nezavolá, ale předá jako argument
alertContext(myObj.getContext);