在javascript对象中,从何处设置self?

在javascript对象中,从何处设置self?,javascript,jquery,Javascript,Jquery,我注意到在我的对象的实例中,如果我有一个jQuery点击处理程序等,this关键字会被覆盖,因此我必须在范围之外设置一个self属性并访问它 我的问题是: 我应该在对象的主体中设置self,还是在每个方法中设置self。是 有区别吗 在这种情况下,self是否指向实例而不是类? 谢谢 var ExampleVM = function () { var self1 = this; this.toggleIsSlidedOut = function () {

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

我的问题是:

  • 我应该在对象的主体中设置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());
            });
        };
    };
我应该在对象的主体中,还是在每个方法中设置自我。有区别吗

因为下面的评论澄清了这是关于
.animate()
回调:()

self1
self2
之间的差异主要是风格的问题。使用
self1
,只需定义一次。但是,
self2
将使声明更接近其使用位置

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

self.isSlidedOut(!self.isSlidedOut());
所示,此
将引用已设置动画的
元素

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


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

它应该指向实例。在任何
函数
中,
很少引用正在调用的
函数

如果需要引用,可以使用其名称或包含它的任何属性:

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

    // ...
};

尽管如此,如果您碰巧忘记将
new
ExampleVM
一起使用,
这个
可以引用“全局”对象(
浏览器中的窗口
),或者
未定义

哎哟,对不起,我指的是在animate函数中。this.toggleIsSlidedOut不是callback@Baconbeastnz啊。更新了我的答案。谢谢乔纳森,回答得好!对于任何潜在的贡献者,我想知道“将使声明更接近使用它的地方”是否有任何潜在的影响