Le petit this est l'horreur pour la plupart des développeurs JavaScript (ES5).
Connaissez-vous ses secrets ?
JavaScript’s this: how it works
Le petit this est l'horreur pour la plupart des développeurs JavaScript (ES5). Connaissez-vous ses secrets ? JavaScript’s this: how it works
Quel est le résultat de ce code en mode non-strict ?
function foo() {
return this;
}
foo();
Ici, "this" est un paramètre implicite qui est mis à une valeur par défaut. En mode non-strict, c'est Window.
Quel est le résultat de ce code en mode strict ?
function foo() {
'use strict';
return this === undefined ? 'this is undefined' : this;
}
foo();
Ici, "this" est un paramètre implicite qui est mis à une valeur par défaut. En mode strict, c'est undefined.
Quel doit être le premier paramètre du call pour obtenir la chaîne "Fairephone 2" ?
function telephone(suffix) {
return this.name + suffix;
}
telephone.call(_____, ' 2');
Ici, il faut un object avec une propriété 'name'.
Qu'est-ce que result ?
var that;
function Thing() {
that = this;
that.name = 'foo';
}
var inst = new Thing();
inst.name = 'bar';
var result = that.name;
Le opérateur "new" crée un nouvel objet et le transmet au constructeur via "this".
"This" est le objet crée.
Qu'est-ce que p et p.x ?
function Point(x, y) {
this.x = x;
this.y = y;
}
var p = Point(7, 5);
On a oublié le "new". Vous obtenez un avertissement en mode strict (ceci === indéfini) :
Quelle est la sortie console de ce code ?
var obj = {
foo: function () {
console.log(this === obj);
}
}
obj.foo();
"this" fait référence à l'objet sur lequel la méthode a été invoquée.
Qu'est-ce que result ?
var foo = 1;
this.foo = 2;
var result = foo + this.foo;
Ici, 'foo' est dans le scope global. Et 'this' est le scope global. "foo" est 2, et 2 + 2 = 4. Utiliser le scope global ainsi est une mauvaise pratique.
Quelle est la sortie console de ce code ?
var name = 'foo';
var o = {
name: 'bar',
foo: function() {
var name = 'baz';
console.log(eval('this.name'));
}
};
o.foo();
"this" fait référence à l'objet sur lequel a été invoqué la méthode.
Qu'est-ce que conter.count ?
var counter = {
count: 0,
inc: function () { this.count++; }
};
function callback(func) {
func();
}
callback(counter.inc.bind(counter));
counter.count;
Ici, la méthode est appelée hors context, mais liée au counter via bind.
Qu'est-ce que conter.count ?
var foo = {
bar: function(){ return this.baz; },
baz: 1
};
var f = foo.bar;
typeof f();
Ici, la méthode foo.bar est extrait vers f et perd son context.