技术解析

为什么 jquery 的 extend 方法无法在扩展中获取到传入的链式的参数 this?
0
2021-06-03 20:57:49
idczone

最近在写 jq 的插件时,尝试这样使用以下的结构,发现无论如何都无法获取到 jquery 的链上传递过来的 this:

//扩展 jq
$.fn.extend({
    newFun: {
        Fun_A: function(){
            console.log(this);
        },
        Fun_B: function(){
            //更多的同级方法
        }
    }
});
//执行时
$().newFun.Fun_A();
//结果没有拿到$入口的参数
{Fun_A: ƒ}

然而使用以下代码时,则可以获取到这个$('div')传入的参数,

//扩展 jq
$.fn.extend({
    newFun: function(){
        console.log(this)
    }
});
//执行时
$('div').newFun();
//结果拿到了参数
init(3) [div#imgsgls, div#imgs2gls, div, prevObject: init(1), context: document, selector: "div"]

想想也不奇怪,this 本身就是根据环境不断变化的,但我需要$()里面传入的参数 有什么办法能获得吗?是我忽略了手册上的东西,还是说原本 jq 设计就无法获取到这个参数的呢? 因为以前都是直接调用内置的方法,没自己写过扩展,没想到第一次写就遇到困难了。网上也查了资料,似乎没国外服务器有相关的信息,是我写法太刁钻了吗?菜鸟,汗颜,希望 v 友不吝啬赐教


$.fn.extend({
* newFunc() {
* * const that = this
* * const funcA = function funcA() {
* * * console.log(that === this)
* * }
* * return {
* * * funcA: funcA.bind(that),
* * }
* }
})
用的时候就 $("div").newFunc().funcA() 吧
PS 1202 年了怎么还用 jq...

jquery 挺好用的,而且我写插件也是想间接的了解一下这玩意的设计思路,否则挂靠不上去我直接自己造个轮子不香嘛
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服