為什麼不應該修改JavaScript對象原型

找出為什麼不應該修改JavaScript對象原型以及該怎麼做

作為程序員,我們首先要學習的技能之一就是如何尋找解決方案。

Google是您的朋友。在大多數情況下,2009年以來的StackOverflow回答都是解決2019年以上問題的完美解決方案。

在該特定站點或個人博客上,我有時會看到修改內置Objects原型的代碼。

像本例一樣,通過添加一個insert方法:

Array.prototype.insert = function(index, item) {
  this.splice(index, 0, item)
}

這樣,您可以擁有任何數組並在其上調用insert():

['red', 'blue'].insert(0, 'yellow')

很方便不必定義此類函數並擔心其範圍,您可以將其附加到Array對象,以便每個數組都可以使用它。

只是因為你能夠,並不代表你應該

這種方法有什麼問題?

可能的衝突

假設您使用的庫實現了這種事情。您導入的另一個庫也是如此。也許這些方法的工作方式略有不同,直到一切正常為止,一切似乎都可以正常工作。

您在這裡遇到了一個大問題,因為您無法修改這些庫,但仍想使用它們。

將來驗證您的代碼

假設下一個JavaScript版本實現了Array.insert方法。具有不同的簽名。現在會發生什麼?您需要返回並重寫所有編寫的代碼。也許對於客戶而言,您不再工作了。

或者,也許您是在其他人在自己的項目中使用的庫中完成此操作的。那會更糟。

這種方法只會產生技術債務,並且幾乎會引發問題。

您應該怎麼做呢?

在庫文件中創建一個函數,並在要使用它時將其導入。不要修改您無法控制的對象。

免費下載我的JavaScript初學者手冊


更多js教程: