2014-09-03 8 views
0

Я задающие класс:Javascript класса - функция оптимизации (функции внутри функций)

MyClass = function() { 
    // Class member variables here 
}; 

MyClass.prototype.MyFunction = function() { 
    // Do stuff, see below 
}; 

То, что я не уверен в MyFunction. Это шаблон, который у меня есть в данный момент (функция внутри функции). У меня это так, потому что это выглядит аккуратно. MyFunctionSubFunction встречается только с MyFunction, поэтому с точки зрения стиля я предполагаю, что MyFunctionSubFunction должен быть в определении MyFunction.

MyClass.prototype.MyFunction = function() { 
    var i, j, iIter, jIter, a, b, c, val; 
    var MyFunctionSubFunction = function (a, b, c) { 
     // Do things with a, b and c 
    }; 

    // iIter and jIter are set to values depending on what is going on 

    for(i=0; i<iIter; i++) { 
     for(j=0; j<jIter; j++) { 
      // a, b and c are now set depending on i and j 

      MyFunctionSubFunction(a, b, c); 
     } 
    } 
}; 

Это хорошая практика кодирования (функция внутри функции)?

Оптимизирован ли он для скорости и всего остального?

MyFunction (верхняя функция) вызывается примерно 250 раз в секунду (это игра, это часть кода AI).

Или я должен делать что-то вроде этого вместо ?:

MyClass.prototype.MyFunction = function() { 
    var i, j, iIter, jIter, a, b, c, val; 

    // iIter and jIter are set to values depending on what is going on 

    for(i=0; i<iIter; i++) { 
     for(j=0; j<jIter; j++) { 
      // a, b and c are now set depending on i and j 

      this.MyFunctionSubFunction(a, b, c); 
     } 
    } 
}; 

MyClass.prototype.MyFunctionSubFunction = function (a, b, c) { 
    // Do things with a, b and c 
}; 

ответ

1

Определение MyFunctionSubFunction внутри MyFunction несет накладные расходы, потому что каждый раз, когда MyFunction называется новая функция называется MyFunctionSubFunction создается.

Если вы не хотите MyFunctionSubFunction просачиваться, вы могли бы использовать IIFE:

(function(){ 
    var MyFunctionSubFunction = function (a, b, c) { 
     // Do things with a, b and c 
    }; 
    MyClass.prototype.MyFunction = function() { 
     // use MyFunctionSubFunction here somewhere 
    }; 
})() 

Поскольку MyFunctionSubFunction непосредственно действует на a, b и c, он не должен быть частью MyClass.prototype , Хотя, возможно.

+0

Спасибо. Отмечено, как ответили. (Извините, что я не вернулся раньше, но все внезапно стало напряженным через час после публикации этого вопроса.) – Rewind

Смежные вопросы