43 votes

Fonction imbriquée d'appel Javascript

J'ai le bout de code suivant :

 function initValidation()
{
    // irrelevant code here
    function validate(_block){
        // code here
    }
}

Existe-t-il un moyen d'appeler la fonction validate() dehors de la fonction initValidation() ? J'ai essayé d'appeler validate() mais je pense que ce n'est visible qu'à l'intérieur de la fonction parent.

114voto

Esailija Points 74052

    function initValidation()
    {
        // irrelevant code here
        function validate(_block){
            console.log( "test", _block );
        }
    
        initValidation.validate = validate;
    }

    initValidation();
    initValidation.validate( "hello" );
    //test hello

19voto

AmGates Points 1941

J'espère que vous cherchez quelque chose comme ça

 function initValidation()
{
    // irrelevant code here
    this.validate = function(_block){
        // code here
    }
}

var fCall = new initValidation()
fCall.validate(param);

Cela fonctionnera.

J'espère que cela résout votre problème.

2voto

Jonathan Wang Points 81

Cette invocation renverra l'instruction de fonction, qui est la validation de la fonction. Vous pouvez donc invoquer directement après la première invocation.

 function initValidation() {
  // irrelevant code here
  return function validate(_block) {
    // code here
  }
}

initValidation()();

1voto

Mark Schultheiss Points 13110

Je sais qu'il s'agit d'un ancien post, mais si vous souhaitez créer un ensemble d'instances avec lesquelles vous souhaitez travailler et réutiliser le code, vous pouvez faire quelque chose comme ceci :

 "use strict";
// this is derived from several posts here on SO and ultimately John Resig
function makeClassStrict() {
  var isInternal, instance;
  var constructor = function(args) {
    if (this instanceof constructor) {
      if (typeof this.init == "function") {
        this.init.apply(this, isInternal ? args : arguments);
      }
    } else {
      isInternal = true;
      instance = new constructor(arguments);
      isInternal = false;
      return instance;
    }
  };
  return constructor;
}
var MyClass = makeClassStrict();// create "class"
MyClass.prototype.init = function(employeeName, isWorking) {
  var defaultName = 'notbob';
  this.name = employeeName ? employeeName : defaultName;
  this.working = !!isWorking;
  this.internalValidate = function() {
    return {
      "check": this.working,
      "who": this.name
    };
  };
};
MyClass.prototype.getName = function() {
  return this.name
};
MyClass.prototype.protoValidate = function() {
return {
      "check": this.working,
      "who": this.name
    };
};
var instanceBob = MyClass("Bob", true);// create instance
var instanceFred = MyClass("Fred", false);// create instance
var mything = instanceFred.internalValidate();// call instance function
console.log(mything.check + ":" + mything.who);
var myBobthing = instanceBob.protoValidate();
console.log(myBobthing.check + ":" + myBobthing.who);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X