从这里开始,在javascript对象里面设置自己?

时间:2013-09-09 00:03:14

标签: javascript jquery

我注意到我的对象实例内部,如果我有一个jQuery单击处理程序等,this关键字会被覆盖,因此我必须在范围外设置self属性并访问

我的问题是:

  • 我应该在我的对象体内还是在每种方法中设置自我。 是 有区别吗?
  • 在这种情况下,self是指向实例而不是类吗?

谢谢!

var ExampleVM = function () {
        var self1 = this;
        this.toggleIsSlidedOut = function () {
            var self2 = this;
            this.$con.animate({
                right: '+=' + posX + 'px'
            }, 400, function () {
                selfx.isSlidedOut(!this.isSlidedOut());
            });
        };
    };

1 个答案:

答案 0 :(得分:3)

  

我应该在我的对象的身体或每种方法中设置自我。有区别吗?

由于以下评论澄清了这与.animate()回调有关:(previous post

self1self2之间的区别主要是风格问题。使用self1,您只需要定义一次。但是,self2会使声明更接近于使用它的位置。

但是,无论哪种方式,只要您对两个方法调用都使用self(或self1等),它就会起作用:

self.isSlidedOut(!self.isSlidedOut());

由于this会引用动画的Element

注意:如果重点放在toggleIsSlidedOut,就像我第一次那样,那么它可能会有所作为。然后,这取决于您是否希望该方法有效地绑定到实例(self1)或能够与其他上下文(self2)进行交互。


  

在这种情况下,self是指向实例而不是类吗?

它应该指向实例。在任何function内,this很少引用被调用的function

如果您需要参考,您可以使用其名称持有它的任何属性:

this.toggleIsSlidedOut = function actualFunctionName() {
    console.log(actualFunctionName); // function ...

    // ...
};

但是,如果您碰巧忘记将newExampleVM一起使用,this可以引用“ global ”对象({{1在浏览器中)或window