Javascript JQuery动画完整功能:如何恢复我的";“这是什么?”;?
我刚开始使用jQuery,我有以下问题:Javascript JQuery动画完整功能:如何恢复我的";“这是什么?”;?,javascript,jquery,jquery-animate,Javascript,Jquery,Jquery Animate,我刚开始使用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")
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属性的值。问题是,在该上下文中,
此
指向正在设置动画的DOM元素,而不再指向调用方对象。将对原始this的引用保存在变量中:
function AClass(){
this.attribute = /*something*/
var self = this;
AClass.prototype.COMPLETE= function() {
/* Use: self.attributes */
}
AClass.prototype.doSomething = function() {
$("something").animate(..,..,..,COMPLETE);
}
}
可以使用将特定上下文绑定到回调。或者,如果您不关心旧浏览器(即IE<9),您可以使用(JS1.8.5)。基本上在需要提供函数作为回调put的地方:
$.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));
}
演示:与您的问题没有直接关系,但为什么要从构造函数内部设置原型的属性?然后,每次创建新的
AClass
对象时,这些属性都会被覆盖。我刚开始学习javascript,据我所知,每个实例都共享同一段代码,否则该类的每个实例都会有同一段代码的副本,这不是最优的(简而言之,每个实例都从类prototype属性继承方法,因此它们都指向相同的代码)这就是想法,但通常您会在构造函数之外(通常紧接着)分配prototype方法和属性.是的…虽然我觉得这有点混乱,但我还是要接受你的建议,因为我意识到,即使结果是一样的,每次实例化类时我都会产生一些开销,我重新分配方法,是不是错了?现在我开始了…因为方法AClass.prototype.COMPLETE不在AClass函数定义中,t他使用变量“self”(见答案)无法再从那里访问了太棒了!成功了!至少到目前为止xD感谢您的帮助!我感谢您使用多个AClass
实例对此进行了测试?因为COMPLETE
作为原型的一种方法,所有实例都将引用相同的COMPLETE
,因此所有实例都将引用self
最后一个实例的变量。(或者,如果原型方法是在构造函数之后声明的,更常见的是,这种闭包机制根本不起作用。)太棒了!太棒了!所以我让代理函数在作为第二个输入参数(在本例中为“this”)给出的上下文中为我执行完整的函数代码,谢谢你帮助我!