有没有办法解决脚本#和页面上加载的其他脚本之间的命名冲突?例如,我们使用Script#构建了一个组件,该组件将在我们无法更改的现有站点上运行(除了我们的脚本之外)。但是,该站点上的另一个脚本还定义了一些导致各种混乱的相同类型和扩展(例如Boolean.parse)。
答案 0 :(得分:0)
在JavaScript库兼容性方面,脚本#是一个非常糟糕的公民(截至目前的0.7.4)。它的mscorlib.js修改了全局类的原型,例如 Object,Boolean, Date,Error,Number,String和Array。鉴于众所周知的“for ... in”JavaScript怪癖,后者特别令人痛苦,因为原型属性与所有本地对象属性一起被枚举,迫使使用object.hasOwnProperty来保护你的迭代。
在我的评估中,Script#基本上假定它是A)唯一使用的库,或B)唯一试图弄乱全局原型的库。鉴于Script#对jQuery的正式维护支持,B似乎更有可能。
处理你的特殊情况需要付出一些努力。可以在不依赖任何mscorlib功能的情况下编写脚本#代码,然后在没有该文件的情况下运行/发送代码。由于你无法修改其他代码,这可能是唯一的方法(我不想尝试重写mscorlib,并且不知道是否可以给出脚本#的非完全开源组合) 。避免使用mscorlib需要一些纪律和注意 - 你不能/不应该将mscorlib实际删除为正式的项目依赖(由于编译器),你只需要避免使用它。