3

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

我的问题是:

  • 我应该在对象的主体中还是在每个方法中设置 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());
            });
        };
    };
4

1 回答 1

3

我应该在对象的主体中还是在每个方法中设置 self. 有区别吗?

由于下面的评论澄清了这是关于.animate()回调的:(上一篇文章

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

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

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

正如this将指的Element是动画。

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


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

它应该指向实例。在 anyfunction中,很少this提及function被调用的。

如果你需要一个引用,你可以使用它的名字来保存它的任何属性:

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

    // ...
};

但是,如果您碰巧忘记使用newwith ExampleVMthis可以参考“全局”对象(window在浏览器中)或 be undefined

于 2013-09-09T00:27:23.620 回答