Cet article présente principalement l'attribut this en JavaScript. L'éditeur pense qu'il est plutôt bon, je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un œil.
cela renvoie toujours un objet , c'est-à-dire renvoie la propriété ou la méthode où elle se trouve actuellement . 🎜> objet.
Les propriétés d'un objet peuvent être attribuées à un autre objet, donc l'objet actuel où se trouvent les propriétés est variable, c'est-à-dire que le point de celui-ci est variable.
par exemple :
var A = { name : '张三', describe : function(){ return '姓名:' + this.name; } }; var B = { name : '李四' } B.describe = A.describe; B.describe();
var A = { name : '张三', describe : function(){ return '姓名:' + this.name; } }; var name = '李四' f = A.describe; f();
Occasions d'utilisation de ceci
1. Environnement global - peu importe si cela se trouve à l'intérieur de la fonction, tant qu'elle s'exécute dans l'environnement global, cela fait référence à la fenêtre d'objet de niveau supérieur 2. Constructeur - fait référence à l'objet instance eg :var Obj = function(p){ this.p = p; } Obj.prototype.a = function(){ return this.p; } var obj = new Obj('color'); obj.a(); obj.p;
var obj = { foo : function(){ console.log(this); } }; obj.foo();//obj
Remarques sur l'utilisation de ceci
1. Évitez ce multicouchevar o = { f1 : function(){ console.log(this); var f2 = function(){ console.log(this); }(); } } o.f1();
var temp = function(){ console.log(this); }; var o = { f1 : function(){ console.log(this); var f2 = temp(); } } o.f1();
var o = { f1 : function(){ console.log(this); var that = this; var f2 = function(){ console.log(that); }(); } } o.f1();
var o = { v : 'hello', p : ['a1','a2'], f : function(){ this.p.forEach(function(item){ console.log(this.v + ' ' + item); }); } } o.f();
var o = { v : 'hello', p : ['a1','a2'], f : function(){ var that = this; this.p.forEach(function(item){ console.log(that.v + ' ' + item); }); } } o.f();
var o = { v : 'hello', p : ['a1','a2'], f : function(){ this.p.forEach(function(item){ console.log(this.v + ' ' + item); },this); } } o.f();
var o = new Object(); o.f = function(){ console.log(this === o); } o.f();//true $("#button").on("click",o.f);//false
Lier cette méthode
JavaScript fournit trois méthodes : appeler, appliquer et lier pour changer/corriger le point de cecifunction.prototype.call()
La méthode d'appel de l'instance de fonction peut Spécifier la portée où il se trouve lorsque la fonction est exécutée. Le paramètre de la méthode d'appel est un objet. Si le paramètre est vide, nul ou non défini, l'objet global sera transmis par défaut. Si le paramètre d'appel n'est pas un objet, il sera automatiquement encapsulé dans un objet d'habillage. func.call(thisValue,arg1,arg2,…)var n = 123; var obj = {n : 456}; function a(){ console.log(this.n); } a.call();//123 a.call(null);//123 a.call(undefined);//123 a.call(window);//123 a.call(obj);//456
var obj = {}; //原生方法 obj.hasOwnProperty('toString');//false //覆盖了原生的方法 obj.hasOwnProperty = function(){ return true; } obj.hasOwnProperty('toString');//true //调回原生的方法 Object.prototype.hasOwnProperty.call(obj,'toString');//false
fonction. prototype.apply ()
La seule différence entre apply et call est que apply accepte un tableau comme paramètre lorsque la fonction est exécutée, func.apply(thisValue,[arg1,arg2,... ]) Une des applications de apply - trouver le plus grand élément du tableauvar a = [10,3,4,2]; Math.max.apply(null,a);
La deuxième application de apply - changer les éléments vides du tableau en non défini (car le forEach La méthode du tableau ignorera les éléments vides, mais ne sautera pas undéfini) ?
var a = ['a','','b']; function print(i){ console.log(i); } a.forEach(print);//a b Array.apply(null,a).forEach(print);//a undefined b
Array.prototype.slice.apply({0:1,length:1});
var o = new Object(); o.f = function(){ console.log(this === o); } var f = function(){ o.f.apply(o);//或o.f.call(o); } $("#button").on("click",f);
var d = new Date(); d.getTime(); var print = d.getTime; print();//Uncaught TypeError: this is not a Date object.
var print = d.getTime.bind(d);
var add = function(x,y){ return x * this.m + y * this.n; } var obj = { m:2, n:2 } var newAdd = add.bind(obj,5);//绑定add的第一个参数x newAdd(5);//第二个参数y
if(!('bind' in Function.prototype)){ Function.prototype.bind = function(){ var fn = this; var context = arguments[0]; var args = Array.prototype.slice.call(arguments,1); return function(){ return fn.apply(context,args); } } }
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!