最近,我一直在构建一些JavaScript库以及一些jQuery插件,我有一个'utils.js'文件,我把所有自定义函数放到Array
,String
, Number
等我将其包含在库或插件的最终缩小版本中。
这样的事情:
String.prototype.custom_method = function() {
// Do custom stuff
};
Array.prototype.custom_method = function() {
// Do custom stuff
};
所以,这些是我的问题:
答案 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/一个努力不使用装饰器方法做到这一点的库。这对于拥有代码库的用户来说更加友好,除了代码之外,代码可以包括善良知道什么。
但是,如果您的代码可以确定地自行运行,那么请立即使用它。