我注意到我的对象实例内部,如果我有一个jQuery单击处理程序等,this
关键字会被覆盖,因此我必须在范围外设置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());
});
};
};
答案 0 :(得分:3)
我应该在我的对象的身体或每种方法中设置自我。有区别吗?
由于以下评论澄清了这与.animate()
回调有关:(previous post)
self1
和self2
之间的区别主要是风格问题。使用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 ...
// ...
};
但是,如果您碰巧忘记将new
与ExampleVM
一起使用,this
可以引用“ global ”对象({{1在浏览器中)或window
。