2012-07-21 27 views
0

我开始使用jQuery和我有以下问题:JQuery动画完整功能:如何恢复我的“旧本”?

function AClass(){ 
    this.attribute = /*something*/ 
} 

AClass.prototype.COMPLETE= function() { 
    /*FROM HERE I WANT TO ACCESS TO THE ABOVE "this.attribute"!!*/ 
} 

AClass.prototype.doSomething = function() { 
    $("something").animate(..,..,.., this.COMPLETE); 
} 

所以,这就是我所面临的问题。从那个完整的动画函数我想访问AClass属性的值。问题是,在这种情况下,this指向DOM元素被动画,不再指向调用者对象。

+0

没有直接关系,你要问什么,但你为什么要从_inside_构造函数中设置原型的属性?这些属性将在每次创建新的“AClass”对象时被覆盖。 – nnnnnn 2012-07-21 07:53:04

+0

我已经开始使用javascript,并且据知,每个实例都共享同一段代码,其他类的evey实例将会有一个不是最优的相同代码的副本(在简而言之,每个实例都继承了类prototype属性中的方法,因此它们都指向相同的代码) – 2012-07-21 08:06:47

+0

这就是主意,但通常你会分配原型方法和属性_outside_构造函数(通常在之后立即) 。 – nnnnnn 2012-07-21 08:46:08

回答

0

可以使用$.proxy() method绑定一个特定的背景下回调。或者,如果您不关心旧浏览器(即IE < 9),则可以使用(JS 1.8.5).bind() method。基本上,你需要提供yourFunction作为回调的说:

$.proxy(yourFunction, theRequiredContext) 
// or 
yourFunction.bind(theRequiredContext) 

在你的示例代码背景:

function AClass(){ 
    this.attribute = /*something*/ 
} 

AClass.prototype.COMPLETE= function() { 
    /*FROM HERE I WANT TO ACCESS TO THE ABOVE "this.attribute"!!*/ 
} 

AClass.prototype.doSomething = function() { 
    $("something").animate(..,..,..,$.proxy(this.COMPLETE, this)); 
} 

演示:http://jsfiddle.net/P9mbG/

+0

太棒了!你很棒!所以我让代理函数在给出的第二个输入参数(在本例中为'this')给出的上下文中为我执行COMPLETE函数代码,感谢您的帮助! – 2012-07-21 16:47:09

0

保存在变量的原单这一个参考:

function AClass(){ 
    this.attribute = /*something*/ 
    var self = this; 

    AClass.prototype.COMPLETE= function() { 
     /* Use: self.attributes */ 
    } 

    AClass.prototype.doSomething = function() { 
     $("something").animate(..,..,..,COMPLETE); 
    } 
} 
+0

太棒了!有效!至少到目前为止xD谢谢你帮助我!我很感激 – 2012-07-21 08:07:39

+0

你有没有测试过这个不止一个'AClass'实例?因为'COMPLETE'是原型的一个方法,所有的实例都会引用相同的'COMPLETE',所有的都会引用最后一个实例的'self'变量。 (或者,如果原型方法是在构造函数之后声明的,就像更平常一样,这个闭包机制根本就不起作用。) – nnnnnn 2012-07-21 09:00:43

+0

没错!我是从哪里开始的:S – 2012-07-21 09:19:11