jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 了解jQuery中的$.proxy()大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
docs我明白.proxy()会改变作为参数传递的函数的范围.请问有人能更好地向我解释一下吗?我们为什么要这样做?

解决方法

它最终做的是确保函数中的值的值是您想要的值.

一个常见的例子是在单击处理程序内发生的setTimeout.

拿着这个:

$('#myElement').click(function() {
        // In this function,"this" is our DOM element.
    $(this).addClass('aNewClass');
});

意图很简单.单击myElement时,它应该获取类aNewClass.在处理程序内部,它表示被单击的元素.

但是如果我们在添加课程之前想要一个短暂的延迟呢?我们可能会使用setTimeout来完成它,但问题是无论我们为setTimeout提供什么函数,该函数内部的值都将是window而不是我们的元素.

$('#myElement').click(function() {
    setTimeout(function() {
          // Problem! In this function "this" is not our element!
        $(this).addClass('aNewClass');
    },1000);
});

所以我们可以做的是调用$.proxy(),向它发送函数和我们想要赋值给它的值,它将返回一个保留该值的函数.

$('#myElement').click(function() {
   // ------------------v--------give $.proxy our function,setTimeout($.proxy(function() {
        $(this).addClass('aNewClass');  // Now "this" is again our element
    },this),1000);
   // ---^--------------and tell it that we want our DOM element to be the
   //                      value of "this" in the function
});

因此,在我们给$.proxy()函数和我们想要的值之后,它返回了一个函数,以确保正确设置它.

它是如何做到的?它只返回一个匿名函数,该函数使用.apply()方法调用我们的函数,该方法允许它显式设置它的值.

简要回顾一下返回的函数可能如下所示:

function() {
    // v--------func is the function we gave to $.proxy
    func.apply( ctx );
    // ----------^------ ctx is the value we wanted for "this" (our DOM element)
}

所以这个匿名函数被赋予setTimeout,它所做的就是用正确的上下文执行我们的原始函数.

大佬总结

以上是大佬教程为你收集整理的javascript – 了解jQuery中的$.proxy()全部内容,希望文章能够帮你解决javascript – 了解jQuery中的$.proxy()所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。