jQuery.extend()和jQuery.fn.extend()的用法和区别

坚强是说给别人听的谎言 提交于 2019-12-28 06:55:36

1.jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法。
2.jQuery.fn.extend(object);给jQuery对象添加方法。

jQuery.extend() 函数用于将一个或多个对象的内容合并到目标对象。

语法

$.extend( target [, object1 ] [, objectN ] );

否深度合并

$.extend( [deep ], target, object1 [, objectN ] );//默认为false。如果该值为true,且多个对象的某个同名属性也都是对象,则该"属性对象"的属性也将进行合并(不支持第一个参数传递 false) 。

  1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。
  2. 如果多个对象具有相同的属性,则后者会覆盖前者的属性值
var object1 = {
        apple: 0,
        banana: {weight: 52, price: 100},
        cherry: 97
    };
    var object2 = {
        banana: {price: 200},
        durian: 100
    };
 /* object2 合并到 object1 中 */
    $.extend(object1, object2);

结果如图:

    /* object2 合并到 object1 中 */
    $.extend(object1, object2);

结果如图:

合并 defaults 和 options 对象,并且不修改 defaults 对象(这是常用的插件开发模式)

var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" }; 
/*合并默认值和选项,不修改默认对象。*/
var a = $.extend({}, defaults, options);
console.log(a);
console.log(defaults);
console.log(options);

结果如图:

jQuery.fn.extend(object)

jQuery.extend() 的调用并不会把方法扩展到对象的实例上,引用它的方法也需要通过jQuery类来实现,如jQuery.init()

jQuery.fn.extend()的调用把方法扩展到了对象的prototype上,所以实例化一个jQuery对象的时候,它就具有了这些方法,在jQuery.JS中到处体现这一点

$.fn.extend({
    alertWhileClick: function() {
        $(this).click(function() {
            alert($(this).val());
        });
    }
});
//$("#input1")是jQuery的实例,调用这个扩展方法
$("#input1").alertWhileClick();

你可以拓展一个对象到jQuery的 prototype里去,这样的话就是插件机制了。
eg:

(function($) {
    $.fn.tooltip = function(options) {};
    //等价于 var
    tooltip = {
        function(options) {}
    };
    $.fn.extend(tooltip) = $.prototype.extend(tooltip) = $.fn.tooltip
})(jQuery);
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!