Je suis juste curieux de savoir comment JQuery est capable de détourner le mot-clé «Ceci» en JavaScript. Depuis le livre, je lis: "JavaScript Le Guide définitif" indique que "ceci" est un mot clé et vous ne pouvez pas modifier cela comme si vous le pouvez avec un identifiant.
Maintenant, dites que vous êtes dans votre propre constructeur d'objet et que vous appelez un code JQuery, comment est-il capable de vous détourner de vous? p>
function MyObject(){ // At this point "this" is referring to this object $("div").each(function(){ // Now this refers to the currently matched div }); }
6 Réponses :
Cela ne vient rien de rien, cela garantit simplement que "cela" pointe sur ce qu'il veut. Recherchez la fonction "Call" standard disponible pour tout objet de fonction JavaScript. P>
Voir la documentation de Fonction.Appliquez CODE>. Le premier paramètre est le "contexte". Cela peut être n'importe quel objet. Si NULL, il sera scopé globalement. P>
Vous pouvez modifier le contexte d'une fonction (c.-à-d. La valeur code> cette code>) en l'appelant avec EG P> .Call () code> ou
.Apply () code > et passer votre contexte prévu comme premier argument.
for ( var value = object[0];
i < length &&
callback.call( value, i, value ) // <=== LOOK!
!== false;
value = object[++i] ) {}
Notez que la seule différence entre appel () et appliquer () est la manière dont les paramètres de fonction sont transmis. On les prend tous directement en tant que paramètres, l'autre prend une gamme de paramètres.
Vient d'ajouter cette information. Merci frank.
La fonction type code> JavaScript est une méthode appelée
Apply () code>
qui vous permet de spécifier à quel objet ce code> est lié à. Sa signature est la suivante:
function product(name, value)
{
this.name = name;
if (value > 1000)
this.value = 999;
else
this.value = value;
}
function prod_dept(name, value, dept)
{
this.dept = dept;
product.apply(this, arguments);
}
prod_dept.prototype = new product();
// since 5 is less than 1000 value is set
var cheese = new prod_dept("feta", 5, "food");
// since 5000 is above 1000, value will be 999
var car = new prod_dept("honda", 5000, "auto");
Essayez ceci:
var MyObject = { "Test": "Hello world!" }; (function () { alert(this.Test); // Gives "Hello world!" }).call(MyObject); (function () { alert(this.Test); // Gives "Hello world!" }).apply(MyObject); (function () { alert(this.Test); // Gives "undefined" })()
Fonction.apply () et fonction.Call () Vous permet de modifier ce que Ce code> pointe sur JavaScript. Voici quelques articles utiles qui l'expliquent plus en détail - Portée dans JavaScript et Portée de liaison dans JavaScript P>