我刚刚花了将近 2 个小时调试第三方 JavaScript 库,却发现我传递给该库的数组被转换为管道中某处的字符串......我不知道为什么或如何发生这种情况,但尽快当我从项目中删除 Prototype 时,一切正常。
这可能是因为原型扩展了 DOM 吗?我最好的选择是什么?我在我的项目中使用了 Prototype 的元素迭代器、DOM 操作、bind() 方法和字符串操作器,我不想丢失它们。
是否有一个库拥有所有这些,但它适用于对 DOM 扩展敏感的 3rd 方 JS 库?
我刚刚花了将近 2 个小时调试第三方 JavaScript 库,却发现我传递给该库的数组被转换为管道中某处的字符串......我不知道为什么或如何发生这种情况,但尽快当我从项目中删除 Prototype 时,一切正常。
这可能是因为原型扩展了 DOM 吗?我最好的选择是什么?我在我的项目中使用了 Prototype 的元素迭代器、DOM 操作、bind() 方法和字符串操作器,我不想丢失它们。
是否有一个库拥有所有这些,但它适用于对 DOM 扩展敏感的 3rd 方 JS 库?
在过去使用过 Prototype 之前,没有办法让它“玩得很好”(类似于 jQuery 的 noConflict 模式)。
Prototype 背后的方法可以防止这种情况发生。Prototype 的面包和黄油来自它的 Object.extend() 方法,一旦您使用 Prototype 方法操作对象,该方法就会被调用。更不用说 Prototype 在弄乱你的对象之前已经修改了核心 JavaScript 对象。
另一方面,jQuery 完全包含在 jQuery 对象中(据我所知,它在包含时添加到 JavaScript 命名空间中)。
是否还有其他具有类似功能的库?当然,事实上,我相信你现在已经厌倦了听到这个,但你可能可以用 jQuery 完成大部分工作。但是,您不会避免不可避免的:重写代码。它不会与任何其他框架以相同的方式完成,更不用说给你相同的结果/行为了。
因此,您的选择是:
我在jQuery上取得了成功。如果您调用jQuery.noConflict()
,它将与其他 JS 库一起很好地工作。
我的一点苦涩的经历。
我刚刚为 XUL 应用程序编写了自己的框架(我只需要一个没有任何 $ 或原型库甜美的组件模型之类的东西)。它非常小,方便且简单。但是......直到现在,当一切都准备好使用该框架时,我发现它在 XUL 上下文中绝对死了。主要障碍是JavaScript 引擎会丢弃您在基本对象(如 Function、Object 等)中所做的所有更改。因此,使事情工作的关键扩展——fx Function.prototype.toClass、override 和其他——在定义它们的文件之外是不可见的。