了解为什么你不应该修改JavaScript对象原型,以及应该怎么做
作为程序员,我们必须首先学会的技能之一是如何搜索解决方案。
谷歌是你的朋友。而大多数时候,早在2009年的StackOverflow答案就是你2019+问题的完美解决方案。
在那个特定的网站上,或者在个人博客上,我有时会看到修改内置Objects原型的代码。
就像在这个例子中,数组对象原型通过添加一个insert 方法得到了增强。
Array.prototype.insert = function(index, item) {
this.splice(index, 0, item)
}
这样,你可以拥有任何数组并对其调用insert()。
['red', 'blue'].insert(0, 'yellow')
这是很方便的。你不必定义这样的函数,也不必担心它的范围,而是把它附加到数组对象上,这样每个数组都可以使用它。
但是,仅仅因为你可以,并不意味着你应该。
这种方法有什么问题呢?
可能的冲突
假设你使用的一个库实现了这种东西。而你导入的另一个库也是如此。也许这些方法的工作方式略有不同,而且事情看起来很顺利,直到它们不顺利。
你在这里有一个大问题,因为你不能修改这些库,但你仍然想使用它们。
为你的代码提供未来保护
假设下一个版本的JavaScript实现了Array.insert 方法。用一个不同的签名。现在会发生什么?你需要回去重写你写的所有代码。也许是为了一个你不再为之工作的客户。
或者你在一个库中做了这个,而这个库被其他人用在他们自己的项目中。那就更糟糕了。
这种做法只会造成技术债务,而且几乎会招致问题。
你应该怎么做呢?
在一个库文件中创建一个函数,当你想使用它的时候再导入。不要修改你无法控制的对象。