关于jq或zepto中this指向的问题

来源:3-2 zepto中的属性与样式操作

cjq6502

2019-07-04 20:15:54

var box = document.getElementById('box');
box.addEventListener('click',function() {
console.log(this);
})

先是原生写法,因为调用addEventListener的对象是dom元素,所以this就是dom元素。

问题一:这么理解对吗?

$('#box').on('click',function() {
console.log(this);
})

然后是zepto的写法,这里调用on的是zepto对象,按理说this应该也是zepto对象

问题二:为啥这里this输出的也是dom对象呢?是jq或zepto对this做了什么特殊处理吗?

function Animal() {}
Animal.prototype.eat = function(callback) {
console.log(1);
callback();
}

var cat = new Animal();
cat.eat(function() {
console.log(this);
})

最后是自定义的对象,调用eat后,this指向window

问题三:与addEventListener或on类似都是“对象调用函数,函数参数中有回调”,为啥这里回调中的this是指window呢?

写回答

1回答

好帮手慕夭夭

2019-07-05

你好同学,解答如下:

1. 理解的不对哦,与什么对象调用的没有关系。之所以输出dom对象是因为this本身就是原生js中的对象,所以问题1和问题2中输出都是dom对象。

2.如果想要输出jQuery对象或者zepto对象,应该使用它们的$()的语法把dom对象转换为jQuery或者zepto对象,即如下:

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

3.this指向函数的调用者。像事件绑定在元素上,当点击元素的时候,事件函数才会执行。即事件函数是元素调用,它里面的this指向的就是元素哦。

而像如下调用cat中的方法,是代码顺序执行自动执行调用的,那么自动调用的函数都是window去进行调用的,所以this指向的就是window哦。

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

祝学习愉快,望采纳。

0

0 学习 · 6815 问题

查看课程