Виклик внутрішньої функції

Якщо я маю:

var myFunction = function() {
    var myInner = function() {
    }
}

то як я можу викликати myFunction.myInner ()?

1

6 Відповіді

Ви також можете зробити щось на кшталт:

var myFunction = function() {
   this.myInner = function() {
     //...
   }
}

var foo = new myFunction();
foo.myInner();

Або ще один зразок, яким я користуюся, наприклад, мімічних статичних класів:

var myFunction = new function() {
   this.myInner = function() {
     //...
   }
};

myFunction.myInner();
3
додано
Також мені подобається підхід до карт, про який згадував і Нінірх. Це здорово, якщо вам просто потрібно об'єднати купу завдань. Мій шлях, мабуть, краще, якщо вам потрібні приватні змінні, а методи називають інші методи, а що ні.
додано Автор Mike Christensen, джерело
Щоб додати, це. робить функцію myInner загальнодоступною функцією на об'єкті myFunction, де як використання var робить його приватним (через закриття)
додано Автор Matt, джерело

ви можете називати це таким чином:

var myFunction = function() {
    var myInner = function() {}

    return myInner;
}

myFunction()();

У вашому прикладі ви створюєте внутрішню функцію, але ви повинні повернути її, щоб зробити її доступною.

3
додано
Ой, моя погана подяка.
додано Автор kemiller2002, джерело
це не має сенсу. Ви мали на увазі myFunction() ()?
додано Автор Esailija, джерело

Якщо ви побудували об'єкт злегка інакше, ви можете використовувати:

var myFunction = {
  innerFunction: function(txt){
    alert(txt);
  }    
}

myFunction.innerFunction("heyooo");

Це може бути не ідеально, хоча в залежності від того, що ви намагаєтеся досягти.

fiddle: http://jsfiddle.net/neilheinrich/Xjegt/

2
додано
Я думаю, це чудовий приклад.
додано Автор Phillip Senn, джерело

Ви не можете. Дозвольте мені переформулювати питання, щоб поглянути на жахливий світ, де можна зробити те, що ти просив

var myFunction = function() {
    for(var i=0; i

Якщо ви хочете отримати доступ до внутрішньої функції, вам потрібно буде повернути його або встановити глобальну змінну або будь-яке з речей, які ви також хотіли б зробити, якщо це була змінна, а не функція.

1
додано

Функції є областями JavaScript. Ви не можете викликати функцію з однієї функції, за винятком, якщо ви оголошувати це як метод. Деякі з них припустили, що ви використовуєте об'єкти або дивні моделі, які можуть бути або не бути тим, що ви хочете ...

Якщо вам потрібна функція "класу", яка використовує загальнодоступні та приватні методи та змінні, виконайте наступні дії:

//Declare your "class"
function Foo(specs) {

    //Can do whatever you want with specs
    //jQuery uses it to initialize plugin data ;)

    //These are examples of private variables
    var a = 1;
    var b = "b";

    //These are examples of public variables
    this.aa = 1;
    this.bb = "b";

    //This is a private method
    function Bar_Private(p0,p1) {...}

    //This is a public method
    this.Bar_Public = function(p0,p1) {...}

}

//Now to use it....
//Create an instance
var myInstance = new Foo();

//Using it
alert(myInstance.a);    //Reference Error
alert(myInstance.aa);   //Alerts 1

myInstance.Bar_Private(0,1);  //Reference Error
myInstance.Bar_Public(0,1);   //Calls Bar_Public with 0 and 1 as params

У JavaScript немає дійсних класів, але найпростіше описати цей шаблон як "клас-подібний".

Очевидно, ви можете додати стільки публічних/приватних методів, об'єктів тощо, як вам подобається.

Також зверніть увагу, НЕ ЗАБУХ "НОВОГО" ОПЕРАТОРА, ПОВ'ЯЗАНІ З ВИКОНАННЯМ ІНСТАНЦІЇ ЦЬОГО ПАТЕРНУ ... якщо ви це зробите, тоді "це" пов'язано з вашим глобальним просторі і може переоцінити інші дані програми (зіткнення назв).

Сподіваюся, це допомагає, удачі!

1
додано
Ну, це була дуже повна відповідь. Дякую jyore!
додано Автор Phillip Senn, джерело
Ніякої проблеми, я радий, що зможу допомогти
додано Автор jyore, джерело

У цьому випадку ви можете викликати лише внутрішню функцію, виконуючи код, який знаходиться всередині зовнішньої функції ... якщо ви тільки що повернете внутрішню функцію.

var myFunction = function() {
    var myInner = function() {
    }
   //you can call it here
    myInner();
}
0
додано
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram