函数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
相似问题