首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本机原型vs $.extension()

本机原型vs $.extension()
EN

Stack Overflow用户
提问于 2010-09-25 20:21:37
回答 3查看 788关注 0票数 10

在工作中,我们使用jQuery。在我们开始使用它后不久,我看到一些开发人员正在将函数添加到jQuery-扩展名. we文件中。在内部,我发现了大量添加到$中的方法,这些方法实质上相当于jQuery上的静态方法。这里有几个:

代码语言:javascript
复制
$.formatString(str, args) {
    ...
}

$.objectToArray(obj) {
    ...
}

等。实际上,他们中没有人使用与jQuery有关的任何东西。这让我觉得很奇怪。

最后,我们需要在我们的库中一个函数来本地化日期。我的解决方案是创建:

代码语言:javascript
复制
Date.prototype.toLocaleDate = function() {
    ...
}

Date.parseLocalDate = function() {
   ...
}

在做完这件事后不久,一位资深的开发人员来问我我在做什么。他告诉我,在我工作的地方,我们不会创造原型,因为它们是邪恶的。他给出的唯一原因是,它们从根本上说是一种糟糕的语言特性,因为它们“可能被滥用”,看到原型(例如,我如何知道新的Date().toLocaleDate()是一个原型而不是原生ECMAScript)是令人困惑的。通过使用$.formatString(...)而不是"blah blah".formatString(...),我们清楚地知道,任何带有$的内容都不是本机JavaScript的一部分。

这些理由似乎有点愚蠢,但我提出了一个折衷方案,这样他就不必记住一个方法是否是一个原型--在原型函数名前加上$

代码语言:javascript
复制
String.prototype.$format = function() {
    ...
}

"blah blah".$format(...);

这很快就被驳回了,现在我不得不到处添加这些$.myPrototypeAsAFauxStaticMethodOnjQuery()函数。

难道只有我一个人认为这种做法是愚蠢的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-25 21:49:29

本土原型的争论有点累,双方都有正确的观点,我会尝试总结它们,希望能看到大的前景。

没有必要扩展本机原型。你已经得到了你需要的一切。

pro JS标准库非常缺乏。数组和字符串缺少许多重要的特性。

使用函数或您自己的“名称空间”。

pro方法(如foo.trim() )比org.blah.trim(foo)这样的函数更符合语言的精神。所有东西都是javascript中的对象,让它变成那样。

原生JS对象是为语言设计器“保留”的。我们的方法可能会意外地覆盖新增加的内置。

pro objects是一个很好的特性,不使用它是很愚蠢的。新的Javascript版本不是每天都会发生的事情,对标准的添加是众所周知的。

扩展本机原型的是令人困惑的,因为我们的方法和本机方法之间没有区别。

pro JS标准库很小,而且有很好的文档。我们javascript开发人员应该知道本地方法的名称。

相反的扩展原型可能导致名称空间冲突。

pro是的,但这也可能发生在全局函数或众所周知的全局对象(如$)中。

自定义方法是可枚举的。

pro是的,但是还有hasOwnProperty来救你。将其封装到您自己的枚举器函数中,并停止对对象使用原始for..in循环。

(不是一个真正的答案,因此CW)

票数 4
EN

Stack Overflow用户

发布于 2010-09-25 21:31:47

  1. 高级职称往往被高估。
  2. 有很多人不理解原型遗传。
  3. 尽管扩展本机JavaScript对象的原型是合法的,但不要这样做。您可能会与框架发生冲突。
  4. 劫持非jQuery实用程序函数的$是没有意义的。为什么不使用公司自己的名称空间呢?如果你需要简洁,使用$$等。
票数 1
EN

Stack Overflow用户

发布于 2010-09-26 00:01:17

我认为这并不愚蠢!,但是使用原型更漂亮!但是又有谁会在乎美呢?您的代码最终将是可怕的和会很烂,但如果它有良好的文档和一致的,您将不需要考虑这些问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3795422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档