Вызов функции из локальной области без eval - PullRequest
1 голос
/ 29 декабря 2011

Если у вас есть что-то подобное:

var ASK = (function (){
   var i = 0, _this = this;
   function private(){
      console.log(i++)
   }
   return {
      call : function (methodName, args){
         eval(methodName + '(' + args + ')' );
      }
   }
})();

ASK.call('private');

Возможно ли вызвать функцию внутри области ASK без использования eval? И почему, когда я пытаюсь использовать _this[method](), я понимаю, что это не функция? Разве _this не должен ссылаться на область внутри ASK = (function(){})?

Ответы [ 3 ]

3 голосов
/ 29 декабря 2011

Использовать объект:

var ASK = (function (){
   var i = 0, _this = this;
   var myFuncs = {
       private: function(){
          console.log(i++)
       }
   }
   return {
      call : function (methodName, args){
         myFuncs[methodName](args);
      }
   }
})();

ASK.call('private');
0 голосов
/ 29 декабря 2011
0 голосов
/ 29 декабря 2011

Разве _это не должно ссылаться на область внутри ASK = (function () {})?

Нет.Вы не вызываете эту анонимную функцию «через» любой объект, на который может ссылаться this, поэтому _this в конечном итоге будет равно window / undefined (в зависимости от строгого режима).

ВыВы, вероятно, запутались из-за того, как this работает в JS.Пожалуйста, поищите в Google это для многих хороших объяснений.

Обратитесь к фрагменту кода @ kan , чтобы узнать, как решить эту проблему, и обратите внимание, что замыкания фактически решают проблему с областью видимости локальной переменной,так что вам не нужно беспокоиться о this здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...