在项目中遇到了一个小坑,就是关于行内绑定点击事件时this的指向以及入口函数的作用域的问题,简单的总结如下避免下次遇到忘记无法解决.总结如下:
行内绑定的点击事件指向的是window上的方法. jq的$(function(){....})入口函数是一个简单的函数,内部的方法不会暴露到window中.
在项目中需要用到原来项目中的弹窗插件,写法是通过行内绑定点击事件的方式来实现的,需要自己手动写一个方法,在里面调用就好了.类似于如下的方式,但是一直报错,说 show is not defined. 看到这个报错我第一就是就是想到的是作用域的问题,然后找不到.
类似与项目中的代码
找大佬同事帮我看了下,试了下把show方法放在入口函数外面就好了,查了一下资料,发现是行内绑定的点击事件造成的问题.再次感谢大佬同事.行内绑定的点击事件,会默认在window上面找show方法.因为最开始我将show放在了入口函数内部,外部获取不不到,就一直报这个错误.
以后遇到类似的问题,报 xxx is not defined 直接找 xxx的作用域就好了
顺便来复习下this的指向的问题:
1:函数内部的this指向window.
2:构造函数内部的this指向新生成的对象实例.
3:call/apply/bind可以改变this的指向.
4:作为对象的方法调用,这个时候this指向的是该对象
作为对象的方法调用,这个时候this指向的是该对象
5:vue中的this指向生成的vm实例.
6:行内样式绑定的点击事件,是在window上面找对应的函数.
解决this指向的王牌方法:
多打印
网友评论