• 再谈JQuery插件$.extend(), $.fn和$.fn.extend()


    在我的博客中,曾经写过一篇关于JQuery插件的文章  https://www.cnblogs.com/wphl-27/p/6903170.html

    今天看一个项目的代码时,看到使用JQuery插件部分,我于是又仔细看了几篇文章,对JQuery插件有了更加深刻的理解,特记录如下:

    我们都知道JQuery中的一个给DOM中元素设置CSS的方法,很简单

    $("div").css("color","red");

    上面这个方法,可以为DOM中的div元素设置css样式。 我们可能从来没有想过,这个在JQuery内部是怎样实现的呢,我们有没有可能仿照它的内部实现,去实现我们自己自定义的方法

    比如我们可以自己实现一个ourFunc(...), 然后也可以这样用 $("div").outFunc(....)  答案是可以的,这个答案就是 JQuery插件

    这个JQuery默认已经提供了的方法css, 其实在JQuery内部就是用JQury插件$.fn来实现的。所以同样的道理,我们也可以自己写方法添加到$.fn上,然后就可以依葫芦画瓢来使用了:  --看下面的例子

    $.fn.setColor = function()
    {
        this.css("color", "blue");
       
        console.log(this instanceof jQuery);  //true
    
    };

    这里,我们定义了一个JQuery插件setColor, 现在我们可以像使用JQuery中默认提供的css方法来一样使用它

    $("div").setColor();

    我们在来看setColor的内部实现, 我们会发现内部用了this, 而从下一个语句console.log我们可以看出,this就是JQuery对象,而不是DOM对象,所以它才可以直接使用JQuery内部的方法(JQuery插件方法)css()

    那么我们可能会想,有时候我们搞不清楚在JQuery插件方法内部的this是不是JQuery对象,我们为了安全起见,用$(this)可以么,答案是完全可以的,其实在这里,this,$(this),$($(this))..不管嵌套多少层,都是一样的。 具体原因这里就不深究了

    反正你就记住 在插件的范围内,this 关键字代表了这个插件将要执行的jQuery对象,而不是原生的DOM对象

    上面的内容,我们讲到了$.fn, 通过$.fn.myFunc()的方式来定义JQuery插件方法 myFunc()

    接下来,我们看看JQuery中的$.extend()

    基于我以前项目中对$.extend()的使用和认识,它的使用应该是这样的 

    $.extend(target, object1, [objectN])  => 即用一个(object1)或者多个(object1,..objectN)其他对象来扩展一个对象(target), 然后返回被扩展的对象

    举个例子如下:

    var basicInfo = {name: Mike, age: 28, gender: male};
    var additionInfo = {name: Luke, age: 32, company: advent};
    
    $.extend(basicInfo, additionInfo);
    
    //结果
    basicInfo == {name: Luke, age: 32, gender: male, company: advent}
  • 相关阅读:
    nginx Server names
    ES6--变量的声明及解构赋值
    Android ListView and Tips.
    Eclipse自己定义keystore
    POJ 1129 Channel Allocation(DFS)
    机器学习笔记十三:Ensemble思想(上)
    设计模式——享元模式具体解释
    老猪带你玩转自定义控件三——sai大神带我实现ios 8 时间滚轮控件
    老猪带你玩转android自定义控件二——自定义索引栏listview
    android动手写控件系列——老猪叫你写相机
  • 原文地址:https://www.cnblogs.com/wphl-27/p/10597913.html
Copyright © 2020-2023  润新知