Pergunta

Eu gosto da revelando módulo padrão.Vou ter funções privadas, que gostaria de tornar público e devolvê-los.Mas eu também poderá ter algumas funções dentro do meu revelando módulo padrão de retorno "isso"...

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
      }
      }();

É ok para "devolver este" se eu estou explicitamente devolver algo?(no contexto de usar o revelando módulo padrão).Se não, como posso transformar minha função local oplayer.danos para ser usado em um contexto adequado?Obrigado por qualquer conselho!Eu só estou tentando envolver minha mente em torno de todo o "retorno a este conceito.

Foi útil?

Solução

Isso deve ser bom, porque "isso" é contextual para a execução.Porque você está voltando isso em uma função pública, que é parte da "cortar" o objeto, então você só vai começar a cortar objeto.Então, eu acho que você está tentando fazer deve ser bom se você considere os seguintes cenários:

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

Outras dicas

Por favor, primeiro confira o que o this palavra-chave é, há uma boa introdução ao MDN.

É ok para "devolver este" se eu estou explicitamente devolver algo?

Sim, claro.Este é o padrão para chainability de métodos - tudo retorna o objeto que ele foi chamado.No entanto, a depender de que você precisa para devolvê-lo em cada caso, não só quando os escudos caíram.

Se este não era seu objetivo, é só usar um normal return; instrução (resultados em undefined como como como nenhuma instrução de retorno).

no contexto de usar o revelando módulo padrão

Ele não faz absolutamente não importa onde você definiu essa função.

transformar a minha função para ser usado em um contexto adequado?

(Eu suponho que com "contexto"você se refere aos this objeto aqui)

Você não pode, realmente, o valor de this depende sempre do invokation da função.Claro, você poderia .bind() a função para o seu player objeto ou diretamente apenas o retorno player em vez de this.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top