gpt4 book ai didi

javascript - 简单地通过扩展来覆盖 jQuery 函数?

转载 作者:行者123 更新时间:2023-12-01 01:46:01 24 4
gpt4 key购买 nike

这与另一个 SO Q&A Override jQuery functions 相关,但不重复。 .

从上述问题的答案中可以清楚地看出,重写 jQuery 函数的模式是:

(function($){

// store original reference to the method
var _old = $.fn.method;

$.fn.method = function(arg1,arg2){

if ( ... condition ... ) {
return ....
} else { // do the default
return _old.apply(this,arguments);
}
};
})(jQuery);

但是为什么!?

我已经能够通过在 $.extend$.fn.extend< 中定义一个与要覆盖的函数同名的函数来覆盖 jQuery 函数。/.

考虑一下:

// random example showing jquery function overriding
$.fn.extend({
hide: function() {
$(this).css({"color":"red"});
}
});

$("#test").hide(); // this will actually paint the #test element red!

jsFiddle

我想了解为什么 _old.apply(this,arguments) 是覆盖 jQuery 函数的首选方式,如 here 所示。和 here .

最佳答案

(function($){

// store original reference to the method
// stored locally
var _old = $.fn.method;

$.fn.method = function(arg1,arg2){

if ( ... condition ... ) {
return ....
} else { // do the default
// call apply method, in order to pass the this context.
return _old.apply(this,arguments);
}
};
})(jQuery);

在上面的代码中,我们调用了一个匿名函数,在其中声明了一个局部变量_old。当这个匿名函数执行时,它会保存_old方法引用并形成一个闭包。现在,当我们调用新方法时,即

    $.fn.method = function(arg1,arg2){
if ( ... condition ... ) {
return ....
} else { // do the default
return _old.apply(this,arguments);
}
};

我们还可以访问 _old 方法,因为它的作用域存在于当前上下文中。然后,我们可以在新方法中使用它。

这里我们在 apply 的帮助下调用 _old 方法,因为我们也希望拥有相同的 this 上下文。

通过这种方法,我们可以通过保留其原始功能来轻松覆盖 jQuery 方法。

关于javascript - 简单地通过扩展来覆盖 jQuery 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23970307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com