var length = 10;
function cl() {
console.log(this.length);
}
var o = {
length: 20,
show: function (fn) {
fn();
arguments[0]();
}
}
o.show(cl); // 10
Concernant cette question, je veux savoir si cela en js ne pointe pas vers celui qui l'appelle ? Pourquoi this in cl pointe-t-il toujours vers window au lieu de o object lorsqu'il est appelé pour la première fois ? Je sais que c'est inutilecall
C'est probablement faux, mais pourquoi est-ce faux ?
Pourquoi le second pointe-t-il des arguments ?
En même temps, pourquoi la première sortie de ce code lors de son exécution dans nodejs n'est-elle pas modifiée ?
Appelez directement en utilisant le nom de la fonction. Peu importe le nombre de couches que vous enveloppez, l'appelant est
window
.Parce que l'opérateur crochet, l'opérateur crochet est une opération de valeur d'objet, dans un sens, il peut être égal au point
.
运算符的,所以这里在形式上其实可以类比成arguments.0()
,你看,这不就是arguments
来调用了这个函数了嘛,所以运行的时候this
pointant vers lui.L'intérêt de ceci n'est pas déterminé lors de sa déclaration mais est défini lors de son appel. Il existe plusieurs situations
.Appel de fonction ordinaire, c'est l'objet global ou indéfini
En tant que méthode d'un objet, c'est cet objet
nouvelle expression, c'est l'objet nouvellement créé prototypé avec cette fonction
Utilisez apply/call pour spécifier ceci
Utilisez bind pour résoudre ce problème
Dans la fonction de gestion des événements, il s'agit de l'élément DOM actuel qui déclenche l'événement (event.currentTarget)
Je ne sais pas si cela va t'aider
En ce qui concerne cette question.
o.show() est exécuté, puis celui-ci utilisé dans la portée de la fonction show pointe vers o.
Mais en fait, fn() est appelé à l'intérieur, fn n'est pas appelé par o, il n'y a pas de o.fn... Un principe relativement simple est que celui qui se trouve devant le point d'appel de fonction sera celui-ci dans la fonction. Ce doit être la fenêtre par défaut.
arguments[0] ==> arguments.0
Les tableaux sont aussi des objets, et les appels [] sont les mêmes que ., ce sont donc des arguments
Concernant node, car il est modulaire, cela pointe vers global, et lorsque var est déclaré, il n'y a pas d'appel de fenêtre comme dans le navigateur. Il n’existe pas de mécanisme de ce type dans node.
o.show()
的this
指向o
,但和本题无关。o.show()
中的fn
标识符解析得到一个引用类型(内部类型),其base
属性(本题中值为show()
方法的活动对象)即是this
的指向。因为活动对象返回null
,所以this
指向null
,从而指向了window
。arguments[0]()
的arguments[0]
同样返回一个引用类型,其base
属性的值为arguments
,所以this
指向arguments
。