Как обрабатывать локальные функции в шаблоне раскрывающего модуля, которые «возвращают это»

StackOverflow https://stackoverflow.com//questions/12691636

Вопрос

Мне нравится узор раскрывающегося модуля.У меня будут частные функции, которые я хотел бы сделать общедоступными и вернуть их.Но у меня также могут быть некоторые локальные функции в моем шаблоне раскрывающего модуля, которые «возвращают это»...

var player = function(){
//my local variable scope...

oplayer.damage = function(){
    if(!this.grace){
        this.shield--;
        if (this.shield == 0){
            return this;
        }
    }
};
      ...

      return {
      damage : oplayer.damage
      }
      }();

Можно ли «вернуть это», если я что-то явно возвращаю?(в контексте использования шаблона раскрывающегося модуля).Если нет, то как я могу преобразовать мою локальную функцию oplayer.damage для использования в правильном контексте?Спасибо за любой совет!Я просто пытаюсь осознать всю концепцию «вернуть это».

Это было полезно?

Решение

Это должно быть хорошо, потому что «это» контекстуально для выполнения.Поскольку вы возвращаете это в публичную функцию, которая является частью объекта «CUT Down», то вы только получите вырубленный объект.Итак, я думаю, что вы пытаетесь сделать, должны быть в порядке, если вы рассмотрите следующие сценарии:

var test = function(){
   var pri = function(){
       console.log("Private");
   };

   var pub = function(){
       pri();
       console.log("pub");
       return this;
   }

   return {
       pub: pub
   };
}();

console.log(test.pri); //-> undefined
console.log(test.pub); //-> function(){…}
console.log(test.pub()); //-> "Private" "pub" [Object {…}]
console.log(test.pub().pri); //-> "Private" "pub" undefined
.

Другие советы

Пожалуйста, сначала проверьте, что this ключевое слово, есть хорошее введение в MDN.

Можно ли «вернуть это», если я что-то явно возвращаю?

Да, конечно.Это шаблон по умолчанию для цепочки методов — все возвращает объект, к которому оно было вызвано.Однако, чтобы полагаться на это, вам придется возвращать его в каждом случае, а не только тогда, когда щиты отключены.

Если это не было вашей целью, просто используйте обычный return; заявление (приводит к undefined как и в случае с оператором возврата).

в контексте использования шаблона раскрывающегося модуля

Абсолютно не имеет значения, где вы определили эту функцию.

преобразовать мою функцию для использования в правильном контексте?

(Я предполагаю, что с "контекст"Вы ссылаетесь на this объект здесь)

На самом деле вы не можете, значение this всегда зависит от вызова функции.Конечно, вы могли бы .bind() функция для вашего player объект или просто напрямую, только возврат player вместо this.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top