在工作中,我们使用jQuery。不久之后,我发现一些开发人员正在向jquery-extensions.js文件中添加函数。在里面,我发现了很多在$
上添加的方法,这些方法本质上相当于jQuery上的静态方法。以下是其中的一些:
$.formatString(str, args) {
...
}
$.objectToArray(obj) {
...
}
等等。它们实际上都没有使用任何与jQuery相关的内容。这让我感到很奇怪。
最终,我们需要在我们的库中创建一个本地化日期的函数。我的解决方案是创建:
Date.prototype.toLocaleDate = function() {
...
}
Date.parseLocalDate = function() {
...
}
我这样做后不久,一位高级开发者就过来问我在做什么。他告诉我,在我们公司,我们不创建原型对象,因为它们是邪恶的。他唯一给出的理由是,它们本质上是一种糟糕的语言特性,因为它们“可能被滥用”,并且看到原型(例如,如何知道new Date().toLocaleDate()
是原型而不是本地的ECMAScript)很令人困惑。通过使用$.formatString(...)
而不是"blah blah".formatString(...)
,我们清楚地表明任何带有$的内容都不是JavaScript的本地部分。
这些理由似乎有点荒谬,但我提出了一个妥协方案,这样他就不必记住方法是否是原型函数 - 用$
前缀来命名原型函数:
String.prototype.$format = function() {
...
}
"blah blah".$format(...);
这个想法很快被否决了,现在我不得不在各处添加这些$.myPrototypeAsAFauxStaticMethodOnjQuery()函数。
我是唯一认为这种做法很愚蠢的人吗?
CompanyName.Util.OurMagicFormatters.formatString()
)/讽刺 - glebmObject
的修改)。你可以采取的一种方法是扩展原生 Date 对象,这可能不太难(可惜对于数组不起作用)。 - Pointy