原型和jQuery连接失败

时间:2010-12-21 21:23:34

标签: javascript jquery firefox google-chrome prototypejs

编辑:我已经将jQuery和原型库排除在外,但问题仍然存在。

简化测试案例1 - Without Concatenation
$函数在a.js中使用window。$来声明,并在b.js中以函数表示法声明。 b.js被加载第二个,并覆盖a.js $ function

简化测试案例2 - WIth Concatenation
结合a.js和b.js,第一个和第二个。功能声明


我在尝试连接原型和jQuery时发现了一些奇怪的东西。似乎在连接时,$ jquery引用不会被原型覆盖。我已经构建了两个测试用例来解决这个问题,它在Chrome8和FF 3.6中失败了。

测试案例1 - Without Concatenation
jQuery和Prototype分别使用不同的脚本标记加载。首先加载jQuery,然后加载Prototype第二个。

测试案例2 - With Concatenation
jQuery和Prototype连接成一个文件,并加载了一个脚本标记。 jQuery是脚本中的第一个,而原型是第二个。

这些应该完全相同,但第二个测试是抛出错误,因为原型中的$ function不会覆盖$ jquery引用。

我是否设置了这些错误,或者浏览器是否在同一个文件中以不同方式呈现javascript?

2 个答案:

答案 0 :(得分:3)

Prototype中的$函数用函数声明实例化:

function $(element) {

由于Prototype库不在闭包中,因此假定的范围是窗口。变量和函数声明被提升到作用域的顶部,因此声明了“function $”,然后jQuery将覆盖$变量。

这是一个小提琴:http://jsfiddle.net/psC7s/

答案 1 :(得分:1)

如果您在代码中调用jQuery.noConflict(),jQuery会将$的值恢复为抓取它之前的值。

不确定为什么它首先没有被覆盖。

jQuery keeps a reference加载时$的值。 You can see here旧引用在noConflict()调用中恢复。