javascript - 如何理解jQuery里面的$.extend和$.fn.extend?

 ---残月_235_999 发布于 2022-11-09 17:28

在$.fn.extend()里面添加的方法,可以在jquery实例里面直接使用,而在$.extend()里面添加的方法,要使用$调用。
网上都说:jQuery.extend(object); 为扩展jQuery类本身,为类添加新的方法。

jQuery.fn.extend(object);给jQuery对象添加方法。

那么这个该怎么理解?object究竟添加到了哪里?jQuery.fn.extend(object);是把方法添加到原型上了吗?jQuery.extend(object);又是把方法添加到了哪里?要是添加到类本身,实例应该也可以使用吧?但是测试的结果是不能使用,必须用$.object这种方式调用。

7 个回答
  • 建议看http://blog.csdn.net/ul646691...

    2022-11-12 01:42 回答
  • 这里的fn实际就是指prototype;你就这样理解 $.fn.extend(xx);就相当于某个对象的构造函数的原型添加,比如 function Arry(){};Arry.prototype.XX=function(){};这个时候所有的数组对象就都有这个方法了。另一个是给对象直接添加,而不是在他的构造函数的原型基础上。

    2022-11-12 01:42 回答
  • $.extend
    这种方式是给jQuery自己扩展方法。
    比如以下代码

    $.customFunc()//customFunc是你通过$.customFunc定义的

    $.fn.extend
    这种方式是给jQuery对象扩展方法,一般写插件用的多
    比如以下代码

    $('.title').test();//test是你自己通过$.fn.test定义的
    2022-11-12 01:42 回答
  • $ 是一个构造函数,$.fn 这个fn是它的原型链吧

    2022-11-12 01:42 回答
  • $.fn.extend === $.extend
    //true
    2022-11-12 01:42 回答
  • 简单的说,$.extend是为jQuery这个构造函数本身添加方法。而$.fn.extend则是为构造函数jQuery生成的对象添加方法。

    举个简单的例子

    function Animal(){}
    
    var cat = new Animal{} 

    $.extend相当于

    Animal.eat=function(){}
    
    Animal.eat()//调用

    而$.fn.extend相当于

    Animal.prototype.eat=function(){}
    
    cat.eat()//调用
    2022-11-12 01:42 回答
  • 我现在想明白了。
    楼上的说的都是对的,我当时问这个问题的时候也都知道,我只是不明白$.extend()定义的方法为什么不能在jQuery对象里面调用。
    我的理解是本来jQuery这个对象就是return new jQuery.prototype.init()这种形式,所以根本就不是new的一个jQuery,所以自然不能直接调用$.extend()定义的方法,谢谢大家回答。

    2022-11-12 01:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有