在构建自己的JavaScript库或jQuery插件时,我是否必须避免入侵?

时间:2011-10-27 03:43:00

标签: javascript jquery jquery-plugins

最近,我一直在构建一些JavaScript库以及一些jQuery插件,我有一个'utils.js'文件,我把所有自定义函数放到ArrayStringNumber等我将其包含在库或插件的最终缩小版本中。

这样的事情:

String.prototype.custom_method = function() {
  // Do custom stuff
};

Array.prototype.custom_method = function() {
  // Do custom stuff
};

所以,这些是我的问题:

  • 我必须避免这个吗?这是一种不好的做法吗?
  • 如果我将这些方法放在每个库/插件范围内会不会更好?

3 个答案:

答案 0 :(得分:2)

鉴于jQuery和Modernizr完全相同(提供了很多开箱即用的功能,而普通人只使用了10%)我没有看到问题。

臃肿吗?也许。仅包含您使用的文件(Google的插件方法,包括您需要的内容之一)是理想的,但是我没有看到比现有文件更大的威胁。

我认为你划分它们是朝着正确的方向迈出的一步,因为多个库可能需要它们(没有重复的声明)。但是,如果你真的担心它,你可以做一个测试声明设置:

if (typeof foo === 'undefined'){
  function foo(){}
}

但是,再一次,它需要包含在您发布/构建的每个库中/上,而不是“无所不包”的库。

答案 1 :(得分:1)

这是对你所要求的一个很好的讨论。

http://perfectionkills.com/extending-built-in-native-objects-evil-or-not/

简短回答:扩展原生类型并不是很好,但还可以。像underscore.js一样包装它们会更好,因为这样就不会有未来的冲突。

答案 2 :(得分:1)

这取决于观众。如果向默认类添加或覆盖方法,则永远不会赢得企业受众。谁知道可能导致的冲突?看看underscore.js http://documentcloud.github.com/underscore/一个努力不使用装饰器方法做到这一点的库。这对于拥有代码库的用户来说更加友好,除了代码之外,代码可以包括善良知道什么。

但是,如果您的代码可以确定地自行运行,那么请立即使用它。