2017-05-29 144 views
0

我想在Array.prototype中添加兩個方法,這將有點像jQuery的addClass/removeClass。這是我寫的東西:添加本地數組原型方法

Array.prototype.addClass = function (className) { 
    this.forEach((element) => { 
    element.classList.add(className); 
    }); 
}; 

Array.prototype.removeClass = function (className) { 
    this.forEach((element) => { 
    element.classList.remove(className); 
    }); 
}; 

有人告訴我,它通常是一個壞主意方法添加到內置JS的原型,所以我想知道的最佳替代品是什麼,以避免潛在的陷阱。

我的想法:

  1. 如果檢查方法已經存在
  2. 只是做一個正常的功能需要兩個參數,該陣列和類名
  3. 創建我的新的自定義對象,將有DOM我建立的操作方法

我也在尋找https://github.com/franciscop/umbrella/blob/master/src/plugins/addclass/addclass.js以及它是如何實現的。

回答

1

是的,有時我們喜歡在構建的JS原型中使用一些額外的方法。在這種情況下,我檢查,如果它已經存在,如果你不應該使用Object.defineProperty因此該方法不枚舉:

if (!Array.prototype.addClass) 
Object.defineProperty(Array.prototype, 'addClass', { 
    value: function(className) { 
     this.forEach((element) => { 
      element.classList.add(className); 
     }); 
    } 
}) 

您可以檢查所有你在mozilla's documentation擁有的各種選擇。