编辑:我已将 jQuery 和原型(prototype)库排除在外,但问题仍然存在。
简化测试用例 1 - Without Concatenation
$ 函数在 a.js 中使用 window.$ 声明,在 b.js 中使用函数符号声明。 b.js 第二个加载,并覆盖 a.js $ function
简化测试用例 2 - WIth Concatenation
结合 a.js 和 b.js,首先是 a,然后是 b。函数声明
我在尝试连接原型(prototype)和 jQuery 时发现了一些奇怪的东西。似乎在连接时,$ jquery 引用不会被原型(prototype)覆盖。我构建了两个测试用例来解决这个问题,但它在 Chrome8 和 FF 3.6 中失败了。
测试用例 1 - Without Concatenation
jQuery 和 Prototype 使用不同的脚本标签分别加载。首先加载 jQuery,然后加载 Prototype。
测试用例 2 - With Concatenation
jQuery 和 Prototype 被连接到一个文件中,并加载了一个脚本标签。 jQuery 是脚本中的第一个,然后添加原型(prototype)。
它们的行为应该相同,但第二个测试会抛出错误,因为原型(prototype)中的 $ 函数不会覆盖 $ jquery 引用。
我是不是设置错了,或者当所有的 javascript 都在同一个文件中时,浏览器会以不同的方式呈现它?
最佳答案
Prototype 中的 $ 函数是用函数声明实例化的:
function $(element) {
由于 Prototype 库不在闭包中,假定范围是窗口。变量和函数声明被提升到作用域的顶部,因此声明了“function $”,然后 $ 变量被 jQuery 覆盖。
这是一个 fiddle :http://jsfiddle.net/psC7s/
关于javascript - 原型(prototype)和 jQuery 连接失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4504026/