Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery动画完整功能:如何恢复我的";“这是什么?”;?_Javascript_Jquery_Jquery Animate - Fatal编程技术网

Javascript 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")

我刚开始使用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属性的值。问题是,在该上下文中,
指向正在设置动画的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”)给出的上下文中为我执行完整的函数代码,谢谢你帮助我!