在javascript对象中,从何处设置self?
我注意到在我的对象的实例中,如果我有一个jQuery点击处理程序等,在javascript对象中,从何处设置self?,javascript,jquery,Javascript,Jquery,我注意到在我的对象的实例中,如果我有一个jQuery点击处理程序等,this关键字会被覆盖,因此我必须在范围之外设置一个self属性并访问它 我的问题是: 我应该在对象的主体中设置self,还是在每个方法中设置self。是 有区别吗 在这种情况下,self是否指向实例而不是类? 谢谢 var ExampleVM = function () { var self1 = this; this.toggleIsSlidedOut = function () {
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啊。更新了我的答案。谢谢乔纳森,回答得好!对于任何潜在的贡献者,我想知道“将使声明更接近使用它的地方”是否有任何潜在的影响