私はこの "キーワード"についてよく理解していますが、何らかの理由でこの特定のケースで私を引き留めています。 bindEventsメソッドの中で、フォームにsubmitイベントをバインドすると、fetchTweetsが実行されます。私はそれが "on"メソッドのコールバック関数の内部にあるので、 "this"は親オブジェクト "Tweets"ではなく、イベントがバインドされたフォームを参照するようになりました。javascriptコールバック関数内の "this"キーワード
私は、後でコールバックで問題を起こさないように親オブジェクトをキャッシュするために、メソッドの先頭にself = thisを宣言するのが一般的であると考えていましたが、この場合は機能しません。そのメソッドは、フォーム提出イベントのコールバック関数になります。
私は、この場合には、それらを使用する必要があった場合、私はちょうど思っていた、または私は何かを明らかに欠けている場合、は.callについて知っていると.applyとさえ$ .proxy。私はこのコードを$ .proxyを使って動作させていますが、私はちょうどそれについてもっとスマートな方法があると思っていました。
var Tweets = {
init: function (config) {
var self = this;
self.config = config;
self.url = 'http://search.twitter.com/search.json?callback=?';
self.bindEvents();
},
bindEvents: function() {
var self = this;
// bind events as needed
self.config.form.on('submit', self.fetchTweets);
},
fetchTweets: function(e) {
e.preventDefault();
var self = this;
var term = self.config.form.find('#term').val();
// grab tweets from the server
$.getJSON(self.url, { q: term }, function(data) {
self.displayTweets(data);
});
},
displayTweets: function(data) {
var self = this;
var tweetList = self.config.list;
tweetList.empty();
// append each tweet to the list
$.each(data.results, function(index, tweet){
$('<li></li>').text(tweet.text).appendTo(tweetList);
});
}
};
Tweets.init({
form: $('#getTweets'),
list: $('#tweets')
});
理にかなって答え、ありがとうございます。感謝します! – rabhw