私はプロトタイプ1.7を使用して、本質的にdivのリストを取得し、タブインタフェースを構築するクラスを構築しています。コールバックのクラスメソッドにアクセスする正しい方法[プロトタイプ]
var tabs = Class.create({
initialize: function(container, options) {
this.options = Object.extend({
// additional options
tabsRendered: null,
}, options || {});
// init code
if(this.options.tabsRendered) {
this.options.tabsRendered();
}
},
// additional methods
setCurrent: function(link){
//adds a .current class to tab clicked and its corresponding section
}
};
new vtabs('products', {
tabsRendered: function(){
if(window.location.hash != "") {
var link = $$('a[href$="' + window.location.hash + '"]');
this.setCurrent(link);
}
}
});
私の質問は、私のtabsRenderedカスタムコールバックに関するものです。コールバックが実行されるとき、this.setCurrent(link)
は何もしません。
このをコールバックに渡すと、私のカスタムコールバックは期待通りに機能します。
if(this.options.tabsRendered) {
this.options.tabsRendered(this);
}
私の推測では、コールバックにこのを渡すことはベストプラクティスではないということです。では、コールバック内からメソッドへのアクセスを許可するにはどうすればよいですか?
おかげ
+1、関数が匿名であるかどうかは関係ありませんが、バインディングとは何の関係もありません。また、 'bind'はそれを行ういくつかの方法のうちの1つに過ぎません(ただし、それは良い方法です)。 'this'とあなたがそれを保存することを保証するための詳細については、http://blog.niftysnippets.org/2008/04/you-must-remember-this.htmlとhttp://blog.niftysnippets.org/2008/03/ mythical-methods.html –
はい。私はリフェーズします。 –
ありがとうgoreSplatter、あなたの提案は多くの助けになりました。興味深いことに、 "Prototype.isFunction(this.option.tabsRendered)"が機能しませんでした。実際には、スクリプトの実行が停止しました。 – jbarreiros