关于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回答
你好同学,解答如下:
1. 理解的不对哦,与什么对象调用的没有关系。之所以输出dom对象是因为this本身就是原生js中的对象,所以问题1和问题2中输出都是dom对象。
2.如果想要输出jQuery对象或者zepto对象,应该使用它们的$()的语法把dom对象转换为jQuery或者zepto对象,即如下:
3.this指向函数的调用者。像事件绑定在元素上,当点击元素的时候,事件函数才会执行。即事件函数是元素调用,它里面的this指向的就是元素哦。
而像如下调用cat中的方法,是代码顺序执行自动执行调用的,那么自动调用的函数都是window去进行调用的,所以this指向的就是window哦。
祝学习愉快,望采纳。
相似问题