函数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回答

好帮手慕言

2019-09-28

同学你好,1、第一问理解的是正确的

2、在下方的两种写法中,效果是一样的,this和self指向的都是canvasLock

http://img.mukewang.com/climg/5d8f0d30093ab7df08060078.jpg

之所以var self = this;这样写,是因为在添加touchstart事件时,里面的this就指向事件的触发者,也就是canvas这个元素。因此在事件外把this存起来,这样在使用时不会有问题了。

我们可以打印一下看结果,会帮助同学理解:

http://img.mukewang.com/climg/5d8f0eaa0919dd4013750410.jpg

控制台:

http://img.mukewang.com/climg/5d8f0eb309788f6c13940157.jpg

如果帮助到了你,欢迎采纳~祝学习愉快~

1

NeverBy

提问者

2019-09-28

0

NeverBy

提问者

2019-09-28

我理解的是self.touchFlag属于canvasLock,但

this.canvas.这里为什么用了this而不是self

0
heverBy
h 用this和self应该是都可以
h019-09-28
共1条回复

0 学习 · 4826 问题

查看课程