2011-03-12 3 views
12

JavaScriptに新しいです、。Javascriptでヘルパーメソッドが頻繁に使用されるのはなぜですか?クロックフォードは、私は理解して内部関数、で使用するために外側の関数でこれを維持する方法を示している機能についての第四章では良い部品(とりわけ)</p> <p>:クロックフォードのJavascriptを読ん

私の質問は、なぜこのヘルパー関数を使用し、彼のコード例と、よりそれのようなトンで、次のとおりです。値が入っている間、追加()は、グローバルスコープ内で座っているので

myObject.double = function() { 
    var that = this; 

    var helper = function() { 
     that.value = add(that.value, that.value); 
    } 
    helper(); 
}; 

それは多分ですmyObjectをコピーする必要がありますので、この(myObject)をコピーして、グローバルに転送してadd()を取得できますか?

それ以外の場合は、なぜヘルパー機能が必要なのかよく分かりません。

答えて

13

本書のこのセクションでは、関数の親のオブジェクトthisにアクセスするときにthatを使用することが一般的であることを示しています。

コードが何をすればいいヘルパー関数を使用する必要はありません。これは、thisオブジェクトでスコープの問題を回避する方法を示す例です。

+0

それは単なるその概念の実例であるかどうか疑問に思っていました。ありがとう –

+1

良い答え私は "それ"を逃したと思います。 – airmanx86

2

カプセル化。あなたの例のhelper()は、myObject.double()のスコープ内にのみ存在し、その外部では利用可能/表示されません。私はそれが "ヘルパー"機能の代わりにプライベートメソッドと呼ばれると信じています。

1

本書には、「これは間違った価値に結びついている」と書かれています。 "this"の "間違った"値はグローバルオブジェクトですか? Crockfordがそれを修正する方法は私を不確かにする。 this.helper()を呼び出すだけで、ヘルパー()をパブリックメソッドにするだけで、 "古典的な"背景を持つ人々にもっとよく知られた方法でそれを修正できませんでしたか? 私は「はい」と推測して、彼はそれをやったやり方で、機能呼び出しパターンを使用するが、それを確認したいという回避策を示していると推測します。私の推測が正しいと確信していないjavascriptに新しいです。

関連する問題

 関連する問題