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

Do I have to avoid being invasive when building my own JavaScript library or jQuery plugin?

本文关键字:是否 JavaScript 自己的 构建 库或 jQuery 插件      更新时间:2023-09-26

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

像这样:

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

所以,这些是我的问题:

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

考虑到jQuery和Modernizr做完全相同的事情(提供很多开箱即用的能力,而普通人仍然只使用10%),我不认为有什么问题。

肿胀吗?也许。最理想的是只包含你使用的文件(谷歌插件的一个伟大之处在于,包含你需要的东西),但是我没有看到比已经存在的更大的威胁。

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

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

但是再一次,它需要包含在你发布/构建的每个库中,而不是一个"包涵一切"的库。

对你的问题进行了很好的讨论。

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

简短的回答:扩展本机类型,不是很好,但是可以。像.js那样包装它们会更好,因为这样以后就不可能发生冲突了。

这取决于观众。如果将方法添加或覆盖到默认类中,将永远无法赢得企业用户的支持。谁知道这会引起什么冲突呢?看一看underscore.js http://documentcloud.github.com/underscore/,这个库努力避免用装饰器方法做这种事。这对于拥有代码库的用户来说要友好得多,这些代码库除了您的代码外,天知道还包括什么。

但是,如果您的代码确实可以在筒仓中自行运行,那么就使用它。