记一次被js中的this坑的事情
2019獨角獸企業重金招聘Python工程師標準>>>
今天,在搞一個很小的功能的時候,被this給小搞了一下!!!在此記錄下來,以防止下次再犯錯了。。。
------------------------邪惡的分割線--------------------------------------
原本還以為自己對this已經懂的差不多了,還是太自大了。廢話不說,直接看場景
// html
<input type="button" value="button" id="testButton"/> //js jQuery(function () {var test = {init: function () {// _.bindAll(this);console.log(this);$('#testButton').click(this.doTest);},doTest:function(){console.log(this);alert('xxx');}};test.init();return test;}); 首先看初始化的是 console.log(this)的結果:
這個是由于我在初始化的是調用的是 test.init(),所以這個時候的this指定的是test這個對象。
然后我們點擊下按鈕之后,再看看 這個時候doTest函數里面的this是什么:
我們發現:這個時候的this是指向的input框了。
當我們在初始化的是時候,這樣:
test.init();test.doTest(); 這個時候的this都應該是test這個對象了;
--------------------------------邪惡的分割線---------------------------------
小結:對于this:是根據上下文的變化的,始終指向被調用該對象的。
------------------------------邪惡的分割線---------------------------------------------
其實,出現這個問題是由于我之前一直會使用一個工具類來綁定this對象的,沒錯,就是underscore這個工具類。
當我們使用underscore的bindAll方法之后,this就會被綁定上下文;
_.bindAll(this);
jQuery(function () {var test = {init: function () {_.bindAll(this);console.log(this);$('#testButton').click(this.doTest);},doTest:function(){console.log(this);}};test.init();test.doTest();return test;});這個時候,頁面初始化的時候:
點擊input的時候:
this還是被綁定在test對象上。
轉載于:https://my.oschina.net/bosscheng/blog/129754
總結
以上是生活随笔為你收集整理的记一次被js中的this坑的事情的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: posix多线程有感--API
- 下一篇: 好用的竖直无缝滚动