Lorsque vous créez une fonction, elle crée une portée nomméethis
的关键字(在幕后),该关键字链接到函数运行的对象。换句话说,this
qui peut être utilisée pour sa fonction, mais c'est une référence à l'objet que la fonction a comme propriété ou méthode.
Regardons lescody
objets de l'article précédent :
Exemple : sample98.html
Remarquez comment, à l'intérieur de la fonctiongetGender
, nous accédons à la propriétégender
en utilisant la notation par points (cody.gender
) sur l'objetgetGender
函数内部,我们如何在cody
对象本身上使用点表示法 (cody.gender
) 访问gender
属性。可以使用this
重写来访问cody
对象,因为this
指向cody
lui-même. L'objet
car
pointe vers l'objet.this.gender
中使用的this
this
的主题可能会令人困惑,但事实并非如此。请记住,一般来说,
this
在函数内部使用来引用该函数所包含的对象,而不是函数本身(例外情况包括使用
new
关键字或
call()
和
应用()
fait simplement référence à l'objet cody qui exploite la fonction.
this
Learguments
和发送到函数的任何参数相反,this
Mot-clé
arguments
et à tous les arguments envoyés à une fonction,this
sont des mots-clés (et non des propriétés) dans l'objet appelant/activant.Comment est déterminée la valeur dethis
myObject
对象被赋予一个名为 sayFoo 的属性,该属性指向sayFoo
函数。当从全局范围调用sayFoo
函数时,this
引用window
对象。当作为 myObject 的方法调用时,this
指的是myObject
La valeur de
myObject
有一个名为foo
L'objetmyObject
dans l'exemple de code suivant se voit attribuer une propriété nommée sayFoo, qui pointe vers la fonctionsayFoo
. Lorsque la fonctionsayFoo
est appelée depuis la portée globale,
. Lorsqu'il est appelé comme méthode de myObject,
fait référence àmyObject
.
this
的值基于调用该函数的上下文。考虑myObject.sayFoo
和sayFoo
都指向相同的函数。但是,根据调用sayFoo()
的位置(上下文),this
Utilisé en raison des propriétés de
window
Exemple : sample100.html
Évidemment, la valeur de
est basée sur le contexte dans lequel la fonction est appelée. Considérez quemyObject.sayFoo
et
sayFoo
pointent tous deux vers la même fonction. Cependant, selon l'endroit où (contexte)
sayFoo()
est appelé, la valeur de
différera.
Si cela peut vous aider, voici le même code utilisant explicitement l'objet d'en-tête (this
和arguments
).
this
Assurez-vous que lorsque vous transmettez une fonction ou faites plusieurs références à une fonction, vous réalisez que la valeur de celle-ci changera en fonction du contexte dans lequel vous appelez la fonction.Toutes les variables saufthis
在一个包含在另一个函数中的函数内部使用时会发生什么。坏消息是在 ECMA 3 中,this
迷失了方向并引用了头对象(浏览器中的window
etarguments
respectent la portée lexicale
func2
和func3
中的this
迷失了方向,并且不是指向myObject
est utilisé dans une fonction contenue dans une autre fonction. La mauvaise nouvelle est que dans ECMA 3,
s'est perdu et a référencé l'objet d'en-tête (l'objetdans le navigateur) au lieu de l'objet où la fonction est définie.foo.func1
时会发生什么。当在foo.func1
(函数中的函数)内部调用匿名函数时,匿名函数内部的this
dansfunc2
etfunc3
sont perdus et pointent non pas versmyObject
mais vers l'objet principal.
Exemple : sample102.htmlthis
foo.func1
. Lorsqu'une fonction anonyme est appelée dansfoo.func1
(une fonction dans une fonction), la valeurthis
值不会丢失,您可以简单地使用作用域链在父函数中保留对this
的引用。以下示例演示了如何使用名为that
Exemple : sample103.html
Maintenant, n'oubliez jamais : la valeur
sera toujours une référence à l'objet principal lorsque sa fonction hôte est enveloppée dans une autre fonction ou appelée dans le contexte d'une autre fonction (encore une fois, cela est corrigé dans ECMAScript 5). Utilisez la chaîne de portée pour résoudre le problème des fonctions imbriquées Pour que la valeur ne soit pas perdue, vous pouvez simplement utiliser une chaîne de portée pour conserver une référence à dans la fonction parent. L'exemple suivant montre comment en utilisant une variable nomméethat
et en exploitant sa portée, nous pouvons mieux suivre le contexte de la fonction. Exemple : sample104.html
call()
或apply()
控制this
的值this
的值通常由调用函数的上下文确定(除非使用 new 关键字,稍后会详细介绍),但您可以使用this
的值>apply()或call()
来定义调用函数时this
指向什么对象。使用这些方法就像在说:“嘿,调用 X 函数,但告诉该函数使用 Z 对象作为this
的值。”通过这样做,JavaScript 确定this
值的默认方式将被覆盖。
在下一个示例中,我们创建一个对象和一个函数。然后我们通过call()
调用该函数,以便函数内this
的值使用myObject
作为其上下文。myFunction
函数内的语句将使用属性填充myObject
,而不是填充头对象。我们更改了this
(在myFunction
内部)引用的对象。
示例:sample105.html
在前面的示例中,我们使用了call()
,但也可以使用apply()
。两者之间的区别在于函数参数的传递方式。使用call()
,参数只是逗号分隔的值。使用apply()
,参数值在数组内部传递,如以下示例所示。
示例:sample106.html
这里您需要学习的是,您可以覆盖 JavaScript 在函数作用域中确定this
值的默认方式。
this
关键字当使用new
关键字调用函数时,构造函数中声明的this
的值指的是实例本身。换句话说:在构造函数中,我们可以在实际创建对象之前通过this
来利用该对象。在这种情况下,this
的默认值的更改方式类似于使用call()
或apply()
。
在下面的示例中,我们设置了一个Person
构造函数,该函数使用this
来引用正在创建的对象。当创建Person
的实例时,this.name
将引用新创建的对象,并在新对象中放置一个名为 name 的属性,并将参数 (name
) 中的值传递给构造函数。
示例:sample107.html
同样,当使用new
关键字调用构造函数时,this
指的是“将成为的对象”。如果我们没有使用new
关键字,则this
的值将是调用Person
的上下文 - 在本例中为头对象。让我们看一下以下场景:
示例:sample108.html
this
引用构造函数实例当在添加到构造函数prototype
属性的函数中使用时,this
指的是调用该方法的实例。假设我们有一个自定义Person()
构造函数。作为参数,它需要人的全名。如果我们需要访问人员的全名,我们将whatIsMyFullName
方法添加到Person.prototype
中,以便所有Person
实例继承该方法。当使用this
时,该方法可以引用调用它的实例(以及它的属性)。
这里我演示了创建两个Person
对象(cody
和lisa
)以及继承的whatIsMyFullName
方法,其中包含this关键字来访问实例。
示例:sample109.html
这里要带走的概念是that
关键字 this 用于在prototype
对象中包含的方法内部使用时引用实例。如果实例不包含该属性,则开始查找原型。
如果this
指向的实例或对象不包含所引用的属性,则应用适用于任何属性查找的相同规则,并且将在原型链上“查找”该属性。因此,在我们的示例中,如果fullName
属性未包含在我们的实例中,则将在Person.prototype.fullName
中查找fullName
属性,然后在Object.prototype.fullName
中查找。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!