0

在这个jsfiddle中,作者为一些自定义敲除绑定编写了一个测试。作为测试的一部分,他/她似乎扩展了 jQuery。

30. $.fn.on = function(event, callback) {对它覆盖的行的理解,没有后续清理 jQuery 可能on在其原型上定义的任何内容吗?第 36 行和 fadeOut 的问题相同。

这是相关的片段,您可以检查小提琴以寻找清理:

30. $.fn.on = function(event, callback) {
31.   ...
...
36. $.fn.fadeOut = function(speed, callback) {
37.   ...

我问的是一般情况下,与 jquery 没有直接关系(即 jquery 可能有也可能没有任何东西onfadeOut。)我正在考虑将类似的测试嵌入到生产代码中,我不希望我的测试改变 jQuery 或任何“真实”对象我的测试可能是这样的。在那一点上,似乎即使进行了清理,其他一些事件驱动(异步)调用也可能会偶然发现更改后的实现——对吗?

4

2 回答 2

1

它不仅覆盖原型中定义的任何内容,而且实际上替换了它。该$.fn属性是 jQuery 对象原型的副本,$.fn实际原型也是如此,即$.fn === jQuery.prototype.

您是正确的,您不能将此类更改隔离到您自己对对象的调用中,只要您的更改生效,它也会影响调用该对象的任何其他代码。

但是,由于 jQuery 是严格单线程的,您可以更改原型,使用对象,然后将原型更改回来,不会影响其他代码。只要您的代码不间断地运行,就不会处理任何事件。

于 2013-08-30T15:25:14.477 回答
0

是的,它覆盖了 jQuery 的原型。它不扩展任何东西,$.fn是 jQuery 原型的别名(core.js 的第 54 行jQuery.fn = jQuery.prototype = {...}),所以覆盖会$.fn.on吹走 jQuery。

在此处观看日志:http: //jsfiddle.net/LzGmJ/

于 2013-08-30T15:28:15.900 回答