0

我正在使用John Resig 的类继承(用于 JavaScript)脚本。它允许您定义可以继承的“类”。我发现了一个限制:我无法从嵌套函数中引用类结构/基类(this)。

例如

var myclass = anotherclass.extend({ 
    dostuff: function() {
        $('#myelem').animate({ top: 100 }, function() { this.saystuff('Done'); });
    },

    saystuff: function(Message) {
        alert(Message);
    }
});

var foo = new myclass();
foo.dostuff();

当脚本调用回调时,this.saystuff它会尝试调用未命名函数的方法,我将回调包装在其中,因此我无法调用函数链。

我发现解决这个问题的唯一方法是调用创建对象的变量,但这不是一个好主意,因为该变量名应该能够随时更改。

任何帮助,将不胜感激。

4

2 回答 2

4

它超出了范围。

dostuff: function() {
   var that=this;
    $('#myelem').animate({ top: 100 }, function() { that.saystuff('Done'); });
},

看起来你正在使用具有代理的 jQuery

dostuff: function() {
    $('#myelem').animate({ top: 100 }, $.proxy(this, this.saystuff, 'Done'); });
},
于 2013-05-14T02:13:03.360 回答
2

“基类”并非天生不可访问。问题是this关键字只是在每个新的嵌套范围内重新调整用途以引用不同的上下文。在您传递给的回调中animatethis指的是包装您的元素的 jQuery 集合。

解决此问题的一种方法是在变量中捕获上下文并将其包含在回调中:

dostuff: function() {
    var that = this;
    $('#myelem').animate({ top: 100 }, function() { that.saystuff('Done'); });
}
于 2013-05-14T02:13:34.080 回答