Vuejs使用addEventListener的事件如何触发执行函数的this

使用addEventListener事件触发执行函数的this

在普通的dom操作中,若是使用addEventListener

如下面的例子





    
    Title


let fn  = function() {
  console.log(this);
};
document.getElementById('btn').addEventListener('click',fn);    

那么,在控制台中输出的this的值为触发事件的dom节点

(另:有用的链接 => 传送门)

如果是使用vuejs中的自定义directive来触发点击事件,触发函数中的this又是什么呢

/**
 * 这是vuejs的一个模块
 */

   

经过测试,这里控制台输出的this的值为:

Vuejs使用addEventListener的事件如何触发执行函数的this_第1张图片

这是一个虚拟dom的值,其中 $el的值为 div.container ,也就是此模块最外层的dom节点,但是此事件绑定的是button,控制台中输出的bind的第一个el的值为

那么,在测试一次,在此

的外层再添加一个

测试结果如下:

Vuejs使用addEventListener的事件如何触发执行函数的this_第2张图片

$el 的值依然为最外层的dom节点

结论:Vuejs中若是使用自定义的directive绑定事件,那么触发事件后执行函数中的this指向此模块最外层的dom节点

addEventListener中事件函数的this指向问题

看代码

//定义一个可见的盒子用于绑定点击事件
var box = document.getElementById('box');
box.x = 'box'
//设置执行函数的对象属性
function outFunc() {
  this.x = 'outFunc';
  box.addEventListener('click', func, false);
}
outFunc();
function func() {
  console.log(this.x); //输出box 说明该this指向的是调用addEventListener的对象
}

代码2

function outFunc() {
  this.x = 'outFunc';//给全局对象window.x赋值(相当于赋值全局变量)
  box.addEventListener('click', func.bind(this), false);
}
function func() {
  console.log(this.x); //输出outFunc 使用bind设置this的值
}

总结:使用bind绑定的事件才是指向函数,否则指向的是调用addEventListener的对象。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

你可能感兴趣的:(Vuejs使用addEventListener的事件如何触发执行函数的this)