亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript:導入模塊或向“文檔”添加功能?

JavaScript:導入模塊或向“文檔”添加功能?

智慧大石 2021-12-23 14:47:24
我想用新方法擴展 vanilla DOM 對象,例如document.createElement()通過定義一個新方法來createElementWithAttrs()擴展,或者擴展Element但以下哪兩個是最佳實踐?方法A(就像Chrome DevTools 是如何做到的,但可能是因為代碼在 ES2015 之前很久就繼承自 WebKit)將新方法添加到現有 DOM 類原型中。// dom.jsDocument.prototype.createElementWithClass = (tagName, className) => { ... };Element.prototype.findEnclosingShadowRoot = () => { ... };// probably a few more// someScriptName.jsconst e1 = document.createElementWithClass(...);...const shadow = e2.findEnclosingShadowRoot();優點:簡潔直觀,因為它們可以像本地 DOM 的一部分一樣使用缺點:必須dom.js用<script>標簽插入HTML有時會讓讀者感到困惑(包括我自己,因為時間長了我可能會忘記)。方法B:在 ES 模塊中定義它們。// dom.jsexport const createElementWithClass = (tagName, className) => { ... };export const findEnclosingShadowRoot = (element) => { ... };// probably a few more// someScriptName.jsimport * as dom from './dom.js';const e1 = dom.createElementWithClass(...);...const shadow = dom.findEnclosingShadowRoot(e2);優點和缺點與上面的“缺點”和“優點”相反。有最佳實踐嗎?我是否錯過了一些需要考慮的優點/缺點?謝謝。
查看完整描述

1 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

剛剛找到了一篇深入分析為什么不推薦方法 A 的文章:http : //perfectkills.com/whats-wrong-with-extending-the-dom,然后要點是:

  1. 缺乏規范。該標準不要求Document,并Element和其他人被暴露。

  2. 宿主對象沒有規則(DOM 對象是宿主對象):它們的行為取決于實現。

  3. 名稱沖突。

  4. 性能開銷。

  5. 瀏覽器中的錯誤,主要是在 IE 和某些版本的 Safari 中。



查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號