Il s'agit d'une fonctionnalité Javascript qui est très facile à mal comprendre puis à utiliser de manière incorrecte. Par conséquent, l'article suivant vous présente principalement les informations pertinentes sur le problème du pointage de ce mot-clé en Javascript. Les questions de test de l'article testent votre familiarité avec cela. Les amis dans le besoin peuvent s'y référer.
Préface
Javascript est un langage dynamique basé sur les objets, c'est-à-dire que tout est un objet, un très A Un exemple typique est que les fonctions sont également traitées comme des objets ordinaires. Javascript peut implémenter une programmation orientée objet à travers certains modèles de conception, dans lesquels ce « pointeur » est une fonctionnalité très importante dans la réalisation d'une programmation orientée objet. Cet article vous donnera une introduction détaillée au contenu pertinent pointé par le mot-clé this en Javascript. Faisons d'abord un petit test. Si vous obtenez toutes les réponses correctes, félicitations, vous n'avez pas besoin de lire plus loin.
Questions du test
Première question
<script> var str = 'zhangsan'; function demo() { var str = 'lisi'; alert(this.str); } window.demo(); // ?? var obj = { str: "wangwu", say: function() { alert(this.str); } } obj.say(); // ?? var fun = obj.say; window.fun(); // ?? </script>
Deuxième question
<script> var username = 'zhangsan'; (function() { var username = 'lisi'; alert(this.username); // ?? })() function demo() { var username = 'wangwu'; function test() { alert(this.username); } test(); // ?? } demo(); </script>
Troisième question
<script> function Person() { this.username = 'zhangsan'; this.say = function() { alert('我叫' + this.username); } } var p = new Person(); p.say(); // ?? var p1 = new Person(); p1.say(); // ?? </script>
Question 4
<script> var username = 'zhangsan'; function demo() { alert(this.username) } var obj1 = { username: "lisi" }; var obj2 = { username: "wangwu" }; demo(); // ?? demo(obj1); // ?? demo(obj2); // ?? demo.call(obj1); // ?? demo.apply(obj2); // ?? </script>
Réponse
Première question : zhangsan wangwu zhangsan
Deuxième question : zhangsan zhangsan
La troisième question : Je m'appelle zhangsan Je m'appelle zhangsan
La quatrième question : zhangsan zhangsan zhangsan lisi wangwu
(Regardez en bas, il y a une analyse détaillée ci-dessous)
ceci
Pointe vers l'objet de la fonction appelante
Aucun objet n'appelle la fonction/La fonction anonyme s'appelle elle-même (cela pointe vers la fenêtre)
Par nouvel Objet généré
appliquer/appeler appel
1. Objet pointant vers la fonction appelante
<script> // this:指向调用函数的对象 var str = 'zhangsan'; function demo() { var str = 'lisi'; //this->window console.log(this); alert(this.str); } window.demo(); // zhangsan var obj = { str: "wangwu", say: function() { // this->obj alert(this.str); } } obj.say(); // wangwu var fun = obj.say; window.fun(); // zhangsan </script>
La fonction globale (demo) appartient à la méthode de l'objet window La fenêtre appelle demo, donc cela pointe vers window<🎜. >
2. Appel de fonction sans objet/fonction anonyme self-calling-> ; cela pointe vers window
<script> // 2.匿名函数自执行|匿名函数|无主函数 this->window var username = 'zhangsan'; // 匿名函数自执行 this->window (function() { var username = 'lisi'; console.log(this); // window alert(this.username); // zhangsan })() function demo() { var username = 'wangwu'; // 无主函数 this->window function test() { // this->window alert(this.username); } test(); // zhangsan } demo(); </script>
3. Objets générés par les nouveaux
<script> // 3.通过new的对象:this指向产生的对象 // 函数 function Person() { // 属性 this.username = 'zhangsan'; // 方法 this.say = function() { // this->p console.log(this); // Person对象 alert('我叫' + this.username); } } // 实例化出一个对象:p就具有了username属性和say方法 var p = new Person(); console.log(p); // Person对象 console.log(p.username); // zhangsan p.say(); // 我叫zhangsan // this->p1 var p1 = new Person(); p1.say(); // Person对象 我叫zhangsan </script>
4. apply/call
function.call([thisObj[,arg1[, arg2[, [,.argN]]]]]) function.apply([thisObj[,argArray]])
Remarque :
Un exemple de compréhension de apply()/call() :
<script> // apply()/call() function demo() { console.log(123); } // 调用函数的时候,demo.call()/demo.apply()最终调用的还是demo() demo(); // 123 demo.call(); //123 demo.apply(); // 123 </script> <script> // call()/apply()的区别: // call()参数单独再call中罗列 // apply()的参数通过数组表示 function demo(m, n, a, b) { alert(m + n + a + b); } demo(1, 5, 3, 4); // 13 demo.call(null, 1, 5, 3, 4); // 13 demo.apply(null, [1, 5, 3, 4]); // 13 </script>
Le quatrième exemple d'utilisation de ceci
<script> // this的第四个用法:call(obj)/apply(obj):强制性的将this指向了obj var username = 'zhangsan'; function demo() { alert(this.username) } var obj1 = { username: "lisi" }; var obj2 = { username: "wangwu" }; // call()/apply():打劫式的改变了this的指向 demo(); // zhangsan demo(obj1); //zhangsan demo(obj2); //zhangsan demo.call(obj1); // lisi demo.apply(obj2); // wangwu </script>
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!