[英]correct way to access class method in callback [prototype]
我正在使用原型1.7,并构建一个类,该类实际上将采用div列表并构建一个tab界面。
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);
}
我的猜测是,通过此进入回调是不是最好的做法。 那么,我如何允许从回调中访问方法?
谢谢
问题是tabsRendered
是未绑定的 。 使用Prototype,您必须使用bind()
绑定匿名函数。 在// init code
执行:
if (Object.isFunction(this.options.tabsRendered))
this.options.tabsRendered = this.options.tabsRendered.bind(this);
之后你可以调用this.options.tabsRendered()
并在那个曾经匿名的函数中, this
将引用正确的对象。 有关绑定的详细信息,请参阅Prototype API文档 。
编辑:正如评论:正确的是,匿名函数不是唯一受影响的函数。 这是this
从已定义的功能范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.