Cet article vous présente une introduction aux propriétés internes des fonctions JavaScript (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Il y a deux objets spéciaux à l'intérieur de la fonction, this et arguments est un objet de type tableau qui contient tous les paramètres passés dans la fonction. Il est principalement utilisé pour enregistrer les paramètres de la fonction. L’objet arguments possède également un attribut appelé, qui est un pointeur vers la fonction propriétaire de l’objet arguments.
appelé
function fact(num){ if(num<=1){ return 1; }else{ return num*fact(num-1); } }
Il s'agit d'une fonction qui implémente factorielle, en utilisant une méthode récursive. Un problème avec cette méthode est que lorsque le nom du fait est modifié, si la fonction interne l'est. Si le nom de la fonction temporelle n'a pas été modifié, la fonction n'est pas valide. À ce stade, l'attribut de l'appelé est utilisé pour remplacer la fonction actuelle par un objet de paramètre num, ce qui est un fait.
L'implémentation de l'appelé est la suivante
function fact(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } }
ce
cela fait référence à l'objet Environnement d'exécution de la fonction, lorsqu'une fonction est appelée en tant que méthode d'un objet, cet objet fait à ce moment référence à l'objet qui appelle actuellement la fonction.
Différents environnements ont différentes valeurs pointées par ceci. Voici plusieurs valeurs pointées par ceci dans différents environnements d'exécution
Appel de méthode
Lorsque la fonction est utilisé comme méthode objet, ceci dans la fonction est lié à l'objet actuel (peut également être appelé un appel de méthode)
Par exemple :
var myNum = { value:1, increment:function(arg){ this.value +=arg; } }; myNum.increment(3); console.log('example1:'+myNum.value);//example1:4
L'incrément ci-dessus est une méthode objet , et à l'intérieur de la méthode objet Cela pointe vers l'objet actuel
appel de fonction
Lorsque la fonction est utilisée comme méthode non-objet, elle est liée à la fenêtre d'objet globale si vous le souhaitez. pour appeler une fonction interne à ce moment, vous pouvez utiliser that = this.
// 一般的函数 function add(a){ return a+2 ; } var value = 2; myNum.count = function (){ let value = 1; let help = function(){ this.value = add(this.value); } help(); console.log(this.value);//4 } myNum.count(); that = this方式 var value = 2; myNum.count = function (){ let value = 1; let that = this; let help = function(){ that.value = add(that.value); } help(); console.log(that.value);//3 } myNum.count();
Constructeur
L'utilisation de l'opérateur new pour appeler le constructeur créera d'abord un prototype (objet prototype) connecté au constructeur, puis le liera à l'objet
function Person(name){ this.name = name; } Person.prototype.sayName = function(){ return this.name; } var person1 = new Person('TOM'); console.log(person1.sayName());
applycallbind
Lie ceci à l'objet d'environnement spécifié
var people = { name:"LILY" } console.log(Person.prototype.sayName.apply(people)); console.log(Person.prototype.sayName.bind(people)()); console.log(Person.prototype.sayName.call(people));
call : La méthode appelle une fonction avec la valeur this donnée et la liste de paramètres fournie.
apply : La méthode appelle une fonction avec la valeur this donnée et les paramètres fournis (tableau ou objet de type tableau).
bind : la méthode crée une nouvelle fonction et définit le mot-clé this sur la "valeur" fournie lorsqu'elle est appelée.
Fonction flèche ES6
Dans la fonction flèche es6, elle pointe vers l'objet où elle est définie, et non vers l'objet de l'environnement d'exécution, ce qui signifie qu'il s'agit d'une valeur inchangée lorsqu'elle est utilisée dans la fonction flèche
function foo(){ setTimeout(()=>{ console.log('name:',this.name); },1000) } var name = "kiki"; foo.call({name:"didi"});//name:didi
La valeur de this dans la fonction flèche pointe vers l'objet d'environnement où elle a été définie. La méthode d'implémentation de la fonction flèche dans es5 : utilisez le mécanisme de that = this pour réaliser la liaison de this<.>
Ce qui précède est une compréhension des propriétés internes des fonctions.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!