我正在阅读来自猫鼬的源代码
Collection.prototype.onOpen = function () {
var self = this;
this.buffer = false;
self.doQueue();
};
我不明白为什么作者分配this
给self
并运行self.doQueue()
. 为什么不直接运行:
this.buffer = false;
this.doQueue();
我是 javascript 新手,感谢您的帮助。
我正在阅读来自猫鼬的源代码
Collection.prototype.onOpen = function () {
var self = this;
this.buffer = false;
self.doQueue();
};
我不明白为什么作者分配this
给self
并运行self.doQueue()
. 为什么不直接运行:
this.buffer = false;
this.doQueue();
我是 javascript 新手,感谢您的帮助。
你是对的,在这种情况下,他们可以简单地使用this
.
使用me
orself
有点小技巧,以确保使用正确的上下文this
,因为在 JavaScript 中,范围this
是变体。例如,如果您有一个事件在您的类中触发一个函数,this
那将是不同的,并且不会是您包含该函数的对象,而是调用该函数的对象。为了解决这个问题,人们经常使用me
或self
确保他们指的是正确的对象... this
,就像在实际对象中一样。
只是为了让@richard 前面说的更清楚,
Collection.prototype.onOpen = function () {
var self = this;
this.buffer = false;
this.onclick = function(){
//do some other operations here
//if you refer `this` here then, `this` will refer to present function not the above. so to make sure it is referring to exact object people pass this to `me` or `self`
self.doQueue();
}
};
您通常这样做的唯一原因是,如果调用doQueue()
位于将更改this
诸如另一个函数之类的值的块内。
但是在这种情况下,它没有任何用途,并且可能是未改回的旧代码的残余。
开发人员很可能想要一致性,但未能如愿。
否则,您将this
在某些函数、self
其他函数中使用以及在其他函数中同时使用这两种函数,具体取决于您使用对象的位置以及是否使用嵌套函数/回调。
通过总是分配this
给self
后者然后使用后者,您在每个函数的一开始就有一个额外的分配,但您总是使用它self
来访问对象。
但是,开发人员在您发布的代码中所做的事情并没有多大意义。他应该使用self
或this
两次,而不是甚至没有必要的混合。
self 是 'this' 的副本,但它总是引用正确的对象,而 'this' 可能不会。