Javascript вызов вложенной функции
у меня есть следующий фрагмент кода:
function initValidation()
{
// irrelevant code here
function validate(_block){
// code here
}
}
есть ли способ, которым я могу вызвать
6 ответов
function initValidation()
{
// irrelevant code here
function validate(_block){
console.log( "test", _block );
}
initValidation.validate = validate;
}
initValidation();
initValidation.validate( "hello" );
//test hello
надеюсь, что вы ищете что-то вроде этого
function initValidation()
{
// irrelevant code here
this.validate = function(_block){
// code here
}
}
var fCall = new initValidation()
fCall.validate(param);
Это будет работать.
надеюсь, это решит вашу проблему.
можно назвать validate
внутри initValidation
. Вроде этого.
function initValidation()
{
// irrelevant code here
function validate(_block){
// code here
}
return validate(someVar);
}
validate
не видно ничего за пределами initValidation
из-за его область.
Edit: вот мое предложение решения.
(function() {
function validate(_block){
// code here
}
function initValidation()
{
// irrelevant code here
return validate(someVar);
}
function otherFunctions() {
// ...
}
// initValidation = function
}());
// initValidation = undefined
все ваши функции будут скрыты от чего-либо за пределами оболочки функций, но могут видеть друг друга.
этот вызов вернет оператор функции, который является функцией validate. Таким образом, вы можете вызвать непосредственно после первого вызова.
function initValidation() {
// irrelevant code here
return function validate(_block) {
// code here
}
}
initValidation()();
Я знаю, что это старый пост, но если вы хотите создать набор экземпляров, с которыми вы хотите работать, чтобы повторно использовать код, вы можете сделать что-то вроде этого:
"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);