我们在项目中使用Mootools以及JSF Richfaces来构建应用程序组件。我们需要使用richfaces模式面板在会话超时时显示警报。但是当Mootools和富人面孔模态面板一起使用时,我们会收到一些错误,这些错误指向与两者使用的prototype.js
冲突。
我在浏览器控制台中可以看到的错误如下:
Uncaught TypeError:undefined不是函数localhost:8080 / ca / faces / a4j / g / 3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:46 未捕获的TypeError:非法调用localhost:8080 / ca / faces / a4j / g / 3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:31 未捕获的TypeError:非法调用localhost:8080 / ca / faces / a4j / g / 3_3_3.Finalorg.ajax4jsf.javascript.PrototypeScript:265
对这个问题的任何提示/灵魂都非常感激。
〜Ragesh
答案 0 :(得分:4)
为什么?
两者都是原型 - 即它们通过添加或更改数组,函数,数字,字符串,元素等原型来扩展本机类型。
尽管像jQuery包装/链方法这样的库在$
这样的单个入口点后面,允许你使用noConflict
/闭包等,但你不能在同一个名称上使用多个方法实现普通类型的原型。
实际上,如果说,String.prototype.contains
的MooTools实现与Prototype 1(以及ES6)的实现不同,它将破坏您的MooTools代码或原型代码,具体取决于最后加载的代码。此外,ES6实施没有受到保护,并被MooTools覆盖(用于修改)。
最后加载并不能确保一切正常。如果脚本有类似的检查:
if (!String.prototype.trim) String.prototype.trim = function(){ ... };
...并且期望是如果它在那里,它必须是本机规范实现,它也删除诸如
之类的东西,然后框架不会重新定义它。所以,即使它看起来像是在工作,你也可能会遇到意想不到的行为并且难以捕捉到错误。