This examples
this - zmienna wskazującą wiązanie do obiektu, z którego funkcja była wywołana.
this
-a (odnosi się do obiektu globalnego, arrow functions are always anonymous),this
funkcji ('zwykłej') w obiekcie referuje do zakresu, w którym została zadeklarowana.this
funkcji w funkcji zwraca Window.this
funkcji w funkcji w trybie strict zwraca undefined.this
w funkcji będacej właściwością obiektu zwraca ten obiekt.this
w instancji funkcji (new
) zwraca referencję do tej funkcji.function a() {
console.log('a', this); // a, Window
function b() {
console.log('b', this); // b, Window
}
b();
}
var f = {
a: () => {
'use strict';
console.log('a', this); // Window
},
b: function() {
'use strict';
console.log('b', this); // {a: function, b: function, c: function, e: function}
},
c: {
d: function() {
console.log('d', this); // {d: function}
}
},
e: function() {
function g() {
console.log('g', this); // 'g', Window
}
function h() {
"use strict";
console.log('h', this); // 'h', undefined
}
const i = () => {
console.log('i', this); // {a: function, b: function, c: function, e: function}
}
g();
h();
i();
}
};
function baz() {
this.a = "Hi!";
console.log(this);
}
baz(); // Window
var a = new baz(); // {a: "Hi!"}
var foo = "Global foo!";
var o = {
foo: "Object's foo!"
}
const arrow = param => {
return `${this.foo} ${param}`;
}
function a(param) {
return `${this.foo} ${param}`;
}
// Funkcja strzałkowa zawsze odnosi się do obiektu globalnego, nie można jej wskazać this-a.
arrow.call(o, 1); // Global foo! 1
// bind Zwraca nową funkcję z wywołanym apply.
var bindedA = a.bind(o);
// var bindedA = a.bind(o, 5);
console.log('Init: ', a(1)); // Global foo! 1
console.log('Call: ', a.call(o, 2)); // Object's foo! 2
console.log('Apply: ', a.apply(o, [3])); // Object's foo! 3
console.log('Binded: ', bindedA(4)); // Object's foo! 4