「これを返す」という明らかにモジュールパターン内でローカル機能を処理する方法

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を適切なコンテキストで使用するにはどうすればよいですか?アドバイスをありがとう!私はちょうど「この復帰」の概念全体の周りに私の心を包み込もうとしています。

役に立ちましたか?

解決

「これ」は実行にコンテキストであるため、大丈夫です。「カットダウン」オブジェクトの一部である公開機能にこれを返すので、カットダウンオブジェクトのみが取得されます。だから、私はあなたが次のシナリオを考えるならば、あなたがしようとしていることをうまくいくと思います:

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 の良い紹介

明示的に何かを返しているのであれば「これを返す」ことはありませんか?

はい、もちろん。これはメソッドのChoeabilityのデフォルトのパターンです - すべてが呼び出されたオブジェクトを返します。ただし、シールドが停止しているときだけでなく、すべての場合に返却する必要があることに頼る必要があります。

これがあなたの目的ではなかった場合は、通常のreturn;ステートメントを使用するだけです(Returnステートメントのようなundefinedの結果)。

明らかにモジュールパターンを使用することと

その機能を定義した場所では関係ない。

私の関数を適切な文脈で使用するように変換しますか?

( " context "ここではthisオブジェクトを参照)

本当に、thisの値は常に関数の呼び出しによって異なります。もちろん、 .bind() の関数playerオブジェクトまたは直接playerの代わりにthisを返すだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top