繁体   English   中英

在回调[prototype]中访问类方法的正确方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM