gpt4 book ai didi

javascript - 在回调[原型(prototype)]中访问类方法的正确方法

转载 作者:行者123 更新时间:2023-12-02 20:29:18 24 4
gpt4 key购买 nike

我正在使用原型(prototype) 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) 不执行任何操作。

如果我将 this 传递到回调中,我的自定义回调将按预期工作。

if( this.options.tabsRendered ) {
this.options.tabsRendered(this);
}

我的猜测是,将 this 传递到回调中并不是最佳实践。那么,我如何允许从回调中访问方法?

谢谢

最佳答案

问题是 tabsRendered未绑定(bind)。使用 Prototype,您必须使用 bind() 绑定(bind)匿名函数。在 //init code 之后执行:

if (Object.isFunction(this.options.tabsRendered))
this.options.tabsRendered = this.options.tabsRendered.bind(this);

之后,您可以调用 this.options.tabsRendered() ,并且在该一次性匿名函数中,this 将引用正确的对象。有关绑定(bind)的详细信息,请参阅 the Prototype API docs .

编辑: 正如所评论的:匿名函数并不是唯一受影响的函数,这是正确的。它是定义函数的作用域中的 this

关于javascript - 在回调[原型(prototype)]中访问类方法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4411911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com