Как обрабатывать локальные функции в шаблоне раскрывающего модуля, которые «возвращают это»
-
12-12-2019 - |
Вопрос
Мне нравится узор раскрывающегося модуля.У меня будут частные функции, которые я хотел бы сделать общедоступными и вернуть их.Но у меня также могут быть некоторые локальные функции в моем шаблоне раскрывающего модуля, которые «возвращают это»...
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
.