V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mostkia
V2EX  ›  程序员

为什么 jquery 的 extend 方法无法在扩展中获取到传入的链式的参数 this?

  •  
  •   mostkia · 2021-04-12 22:26:30 +08:00 · 870 次点击
    这是一个创建于 1317 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在写 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 友不吝啬赐教

    xiaoming1992
        1
    xiaoming1992  
       2021-04-12 22:39:44 +08:00
    $.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...
    mostkia
        2
    mostkia  
    OP
       2021-04-12 22:46:23 +08:00
    @xiaoming1992 jquery 挺好用的,而且我写插件也是想间接的了解一下这玩意的设计思路,否则挂靠不上去我直接自己造个轮子不香嘛😂,而且怎么说呢,vue 虽然也用,但习惯了 dom 选择器总感觉小项目 jquery 这类用着顺手,会不会 vue 这类东西不影响使用 jquery 嘛,现在前端轮子更新太快了,脑袋瓜跟不上潮流了。等年龄大了马上要淘汰掉了,哈哈,谢谢,有思路了。
    mostkia
        3
    mostkia  
    OP
       2021-04-12 23:07:47 +08:00
    @xiaoming1992 已解决问题,感谢
    xiaoming1992
        4
    xiaoming1992  
       2021-04-12 23:29:16 +08:00 via Android
    @mostkia 嗯嗯,只是现在如果不让我用扩展运算符、箭头函数,让我手动添加 css -ms- 等前缀我肯定受不了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5341 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:28 · PVG 16:28 · LAX 00:28 · JFK 03:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.