在构建自己的JavaScript库或jQuery插件时,我是否必须避免侵入性?
Do I have to avoid being invasive when building my own JavaScript library or jQuery plugin?
最近,我一直在构建一些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/,这个库努力避免用装饰器方法做这种事。这对于拥有代码库的用户来说要友好得多,这些代码库除了您的代码外,天知道还包括什么。
但是,如果您的代码确实可以在筒仓中自行运行,那么就使用它。
相关文章:
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 是否可以使用JavaScript/AAJAX在客户端创建一个文件
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- PhantomJS - 检查javascript函数是否正在运行的任何方法
- 是否有任何JavaScript UI组件可以显示字符串之间的差异
- javascript跨浏览器确定用户是否滚动到页面底部
- 是否可以用JavaScript显示等效的文件夹对话框
- 检查是否存在使用chrome扩展的javascript库
- 如何知道javascript for语句中的所有结果是否都是错误的
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 是否可以使用jquery或javascript将自动增量类添加到列表中
- javascript移动交叉浏览器确定用户是否滚动到页面底部
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- javascript数组元素是否知道其封闭数组
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- 是否有任何设置阻止JavaScript在系统上工作
- 是否可以在javascript中读取IE中的本地文件
- 是否有任何Javascript函数从指定的索引中进行正则表达式匹配