J'essaie d'assigner une fonction dans une propriété d'objet de fonction sans invoquer réellement la fonction elle-même.
par exemple,
J'ai la définition de classe d'objet de fonction suivante
function objectOne(name, value, id){ this.name=name; this.value=value; this.id=id; this.methodOne=methodFunction(this); }
La dernière ligne this.methodOne=methodFunction(this);
Je souhaite passer l'objet actuel à la fonction, mais en même temps je ne veux pas exécuter la fonction dès maintenant.
Mais si je le fais de cette façon sans le support this.methodOne = methodFunction, l'argument de cet objet ne serait pas transmis en tant que paramètre à la fonction.
Existe-t-il un moyen de travailler à travers cela.
Merci d'avance
Cette page m'a aidé à m'expliquer le mieux ce concept. Essentiellement, ce serait faire comme les suivants.
function objectOne(name, value, id) { function methodFunction(value) { // do something } var that = this; this.methodOne = function() { methodFunction(that); }; } var x = new objectOne("one", 2, 3); x.methodOne();
Vous pourriez le faire de cette façon
function objectOne(name, value, id){ this.name=name; this.value=value; this.id=id; this.methodOne=function() { methodFunction(this); }; }
Ce genre de chose est pour quoi le curry est destiné. Utilisez Curry () de votre bibliothèque JS préférée, ou créez vous-même:
function curry (func, what_this) { var what_this = what_this || window; var args = []; for (var i=2, len = arguments.length; i < len; ++i) { args.push(arguments[i]); }; return function() { func.apply(what_this, args); }; }
Ensuite, la dernière ligne de votre constructeur ressemble à ceci:
this.methodOne=curry(methodFunction, undefined, this);