函数bindEvent中的var self = this; 这里不太明白
来源:2-3 canvas事件操作
NeverBy
2019-09-28 12:04:49
// 二、功能
// bindEvent
canvasLock.prototype.bindEvent = function() {
var self = this;
/* addEventListener() 方法用于向指定元素添加事件句柄。(例如:DOM.addEventListener("click", function(){}, false);
使用 removeEventListener() 方法来移除 addEventListener() 方法添加的事件句柄。
*/
// 绑定touchstart事件
this.canvas.addEventListener("touchstar", function(e) {
// 点po 位于canvas的坐标
var po = self.getPosition(e);
// 判断 点po 是否在圆内
// pn.(x & y) - p0.(x & y) 的绝对值 > r 就一定不在圆内,返回false
for (var i = 0; i < self.arr.length; i++) {
if (Math.abs(po.x - self.arr[i].x) < self.r && Math.abs(po.y - self.arr[i].y) < self.r) {
self.touchFlag = true;
self.lastPoint.push(self.arr[i]);
self.restPoint.splice(i, 1);
break;
}
}
}, false); // false防止冒泡
// 绑定touchmove事件
this.canvas.addEventListener("touchmove", function(e) {
if (self.touchFlag) {
self.update(self.getPosition(e));
}
}, false);
};这段代码中声明了 var self = this;
但也用了this.canvas来调用全局函数变量
那self.touchFlag属于bingEvent函数内还是属于全局变量呢,为什么这样使用 var self = this;
3回答
同学你好,1、第一问理解的是正确的
2、在下方的两种写法中,效果是一样的,this和self指向的都是canvasLock

之所以var self = this;这样写,是因为在添加touchstart事件时,里面的this就指向事件的触发者,也就是canvas这个元素。因此在事件外把this存起来,这样在使用时不会有问题了。
我们可以打印一下看结果,会帮助同学理解:

控制台:

如果帮助到了你,欢迎采纳~祝学习愉快~
NeverBy
提问者
2019-09-28
NeverBy
提问者
2019-09-28
我理解的是self.touchFlag属于canvasLock,但
this.canvas.这里为什么用了this而不是self
相似问题