91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一篇文章帶你搞懂JS對象的自我銷毀

發布時間:2020-07-08 08:50:19 來源:網絡 閱讀:507 作者:Hjiangxue 欄目:web開發

在日常的JS組件開發中,往往會有一些較為復雜的DOM操作及事件監聽,尤其是在處理UI層面的widgets時候更為明顯。常常會花很多精力在對象的init上,而當組件需要被移除時則僅僅是把所在DOM草草的remove掉就算完事兒。

當然,絕大多數情況這樣處理并沒有什么不妥,因為事件監聽時僅僅局限于所屬的DOM自身,移除DOM后,只要對象的外部引用不再維系,相關的內存占用很快就會被當作垃圾回收掉(本文不討論低版本 IE 內存回收的 BUG)。

其實個人在構建組件(對象)的時候是比較習慣于添加自定義方法destroy,用來手動銷毀對象內部的一些引用。也就是今天要說的僅靠移除DOM并不能達到銷毀對象的幾種情況。

當你的組件出現下面幾種情況時需要特別注意。

一: DOM事件監聽越界
常規情況下,一個組件需要監聽的僅僅是自身的DOM內的事件。偶爾也會有另一種情況,對象不得不操作自身之外的DOM。

拿常見的瀑布流組件為例,除了自身事件,還要監聽頁面的滾動、瀏覽器尺寸重置等事件。因此當瀑布流組件需要被移除時,簡單的移除自身DOM并不能完整銷毀組件對頁面的影響。

下面是常規做法的例子:

//定義瀑布流組件
function WaterFall(node){
  this.node = node;
  window.addEventListener('scroll',function(){
    //do sth
    console.log('scrolling');
  });
}
//實例化一個瀑布流組件
var node_content = document.getElementById('xxx');
new WaterFall(node_content);
//移除瀑布流組件所屬的DOM
node_content.parentNode.removeChild(node_content);

上面的例子很明顯,移除DOM后遺留的事件監聽還在,回調內對組件的引用會導致整個組件常駐內存無法被回收,直至頁面卸載。

不過你可能會說,在移除DOM時順手解除下事件綁定就 OK 啦。事實確實如此,但是如果操作的具體細節讓調用者實現就有點兒麻keng煩die了。因此我們需要提供一個destroy接口讓調用者去解除對窗口滾動等事件的監聽。

//定義瀑布流組件
function WaterFall(node){
  this.node = node;
  this._scrollListenner = function(){
    //do sth
    console.log('scrolling');
  };
  window.addEventListener('scroll',this._scrollListenner);
}                                                   //歡迎加入前端全棧開發交流圈一起學習交流:1007317281
WaterFall.prototype.destroy = function(){
    window.removeEventListener('scroll',this._scrollListenner);
    this.node.parentNode.removeChild(this.node);
};

//實例化一個瀑布流組件
var myWaterFall = new WaterFall(document.getElementById('xxx'));
//注銷瀑布流組件
myWaterFall.destroy();

給大家推薦一個技術交流學習圈,里面概括移動應用網站開發,css,html,webpack,vue node angular以及面試資源等。**獲取資料

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邹平县| 龙山县| 五河县| 金湖县| 县级市| 门头沟区| 仪征市| 昌平区| 乌海市| 娱乐| 资兴市| 集贤县| 徐水县| 琼中| 沂源县| 成安县| 清新县| 宜春市| 新巴尔虎右旗| 洛南县| 柘城县| 宜州市| 饶阳县| 崇仁县| 筠连县| 泰和县| 澄迈县| 永春县| 怀远县| 马鞍山市| 错那县| 华坪县| 贵德县| 弥勒县| 全南县| 莱西市| 汤原县| 丰县| 江源县| 那曲县| 修武县|