2011-12-22 8 views
0

以下のスニペットは、他の同僚から与えられた大きなライブラリの関数です。この関数はプロトタイプの別のメソッドから呼び出されます。だから、jquery関数のパラメータ、オブジェクト、変数

<spellResult .....> 
    <c o=0 l=1 s=1>string string string /> 
    <c o=10 l=1 s=1>string string string /> 
</spellResult> 
parseResults: function(results) { 
    var self = this; 
    this.results = []; 
    var spellcheckFound = $(results).find('c'); 
    $(results).find('c').each(function() { 
     var $this = $(this), 
      offset = $this.attr('o'), 
      length = $this.attr('l'); 
     self.results.push({ 
      word: self.text.substr(offset, length), 
      suggestions: $this.text().split(/\s/) 
     }); 
    }); 
    this.displayResults(); 
}, 

resultsパラメータは、次のようになりますXMLの文字列である

  1. はどのようresultsパラメータはthis.resultsに違うのですか?
  2. this.results = [];の結果パラメータをクリアしていませんか?
  3. self.resultsは異なるオブジェクト/変数ですか、それとも他のオブジェクト/変数の参照ですか?
  4. もう1つの初心者の質問 - これはすべて$(results)ですか?

私はこれを動作させるために私の髪を引き出しているので、どんな助けもありがたいです。あなたがarrayを空this.results = [];

var self = this; 
this.results = []; 

:これは何のためにあるのか

+0

'console.log()'の束をそれぞれのオブジェクトがどのように変化するか見るための場所。たとえば、 'this.results = [];の後に' console.log(self.results) 'を追加して空であるかどうかを確認します。 – Jasper

+0

自己は予約語です。悪い、悪い、悪いエステンプント。悪い。編集:OK予約されていないかもしれませんが、簡単にwindow.selfと混同します。 – jbabey

+0

' string string string />'は間違いなくXMLですが、正しくポストしていないと思います。投稿する前に、コードに明白な構文エラーがないことを確認する必要があります。 –

答えて

0

resultsが正確にわからないため、適切な答えを出すには少し情報がありますか?

碧玉が言うように、中に来るのか見てconsole.logすなわちconsole.log(typeof results)console.log(results)でいくつかの適切なデバッグを行う

「もう一つの初心者の質問 - このすべてに$(結果)は何ですか?」。

$(results)は、resultsのオブジェクトです。基本的には$(results).find('c').each(function() {cresultsにあり、それをループします。

0

「結果」パラメータと「this.results」との違いは何ですか?

this.resultsは、thisの結果という名前のプロパティを指します。 thisの意味は、関数の呼び出し方法によって異なります。 resultsは処理中のXMLです。それをresultsと呼ぶのは悪い名前です。より良い名前はresultsXMLです。

は 'this.results = [];'という行ではありません。結果パラメータをクリアしますか?

はい。コードはXMLを処理しており、this.resultsを処理結果に置き換えています。

は 'self.results'は異なるオブジェクト/変数ですか、それとも他のオブジェクト/変数の参照ですか?selfので

thisに割り当てられ、self.resultsthis.results同じオブジェクトを参照することになります。変数内でselfを使用することは、コード内でthisの値をキャプチャする一般的な手法です。 eachへの呼び出しはthis(処理中のXML要素)の新しい意味を確立するため、eachの呼び出しの前にselfthisに初期化されたのはこのためです。

ともう1つの初心者の質問 - このすべてで$(結果)は何ですか?

これは、XML内でjQueryスタイルのナビゲーションを使用できるように、XMLを囲むjQueryオブジェクトラッパーを作成しています。

+0

* "...関数自体が呼び出された場合には、thisは通常はグローバルオブジェクトを参照しています。関数自体は 'func.call(func)'を呼び出さなければなりません。これはかなり奇妙です。 –

+0

ありがとう、@FelixKling。より正確に修正されます。 – Jacob

0

1.結果パラメータとthis.resultsとの違いは何ですか?

結果は、関数に渡されるローカル変数です。 this.results

2. [] =ラインthis.resultsれない(JavaScriptですべてが機能を含む、対象となる)関数そのものである「本」と呼ばれるオブジェクトのプロパティです。結果パラメータをクリアしますか?

this.results = [];新しい空の配列オブジェクトを宣言するための省略表現です。オブジェクトに新しいプロパティを宣言するときに "var"キーワードを使用する必要はないことに注意してください。名前が衝突すると自動的にそれを作成するか、以前のプロパティを上書きします。

3. self.resultsは別のオブジェクト/変数ですか、それとも他のオブジェクト/変数のリファレンスですか?

自己であり、これは同じオブジェクトへの参照であり、this.resultsとself.resultsは同じプロパティです。そうでなければ、self.results.push(...)と言ったときに「オブジェクトが期待される」というエラーが出るでしょう。

4.もう1つの初心者の質問 - これ以上の初心者の質問は何ですか?

$(結果は)あなたのjavascriptオブジェクトが結果を呼ば取って、あなたがそのような.find()と.each()で

としてjqueryのプロトタイプの機能にアクセスできるようにするjQueryオブジェクト、でそれをラップしていますサイドノート - 投稿したコードを書き換えてください。私の目は痛い。特に、spellcheckFound変数を初期化し、次の行でspellcheckFoundを使うのではなく、次の行ですべて処理を行うすべての処理を行う部分:P

関連する問題