日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记一次被js中的this坑的事情

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记一次被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坑的事情的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。