jQuery中的 $.extend() 和 $.fn.extend()

本文深入解析了jQuery中的$.extend()和$.fn.extend()方法,详细介绍了如何使用这两个方法为jQuery添加静态方法和实例方法,以及如何实现浅层和深层克隆。
$.extend() 和 $.fn.extend() 这两个方法都是给jQuery进行拓展,开发jQuery插件时经常使用

在jQuery源码中,你会看到关于这两个方法的代码的第一行是这样的

jQuery.extend = jQuery.fn.extend = function(){}

可以看出两个方法共用的是同一个函数体,所有的操作都是一样的,只不过两个方法使用的对象不同。

$.extend是为jQuery类添加添加类方法,可以理解为添加静态方法(工具方法)

	$.extend({
		min: function(a, b) { return a < b ? a : b; },
		max: function(a, b) { return a > b ? a : b; },
		add: function(a, b) { return a + b }
	});
	// 调用
	$.min(2,3); //  2 
	$.max(4,5); //  5
	$.add(5,5); //  10

$.extend() 也提供了深度拷贝的方法

	var obj = {
		name:'哈哈', 
		score:80
	};
	var obj1 = {
		name:'嘻嘻',
		success:'A',
		score:{
			Chinese:100,
			math:90
		}
	}
	$.extend(true, obj, obj1);
	
	console.log("obj" , obj);
	console.log("obj1" , obj1);

	obj.score.Chinese = 10;

	console.log(obj.score.Chinese);   // 10
	console.log(obj1.score.Chinese);  // 100

后者的内容克隆到前者,属性重名的直接覆盖,修改属性值互不干扰。
在这里插入图片描述

$.fn.extend则是为jQuery对象添加方法(实例方法)

查看jQuery源码也可以发现

jQuery.fn = jQuery.prototype = {}

可以明显的看到就是为jQuery的原型添加新的属性和方法。

	$.fn.extend({
		toWidth: function() {
			this.width(function(index,width){
				return width + 10
			}).css({
				backgroundColor : 'green'
			});
		}
	});
	// 使用新创建的.check() 方法
	$(".box").click(function(){
		$(this).toWidth();
	})

在这里插入图片描述
$.fn.extend()也有克隆,浅层克隆和深层克隆都有,互不影响。

浅层克隆

	$.fn.extend( obj, obj1);
	obj.score.Chinese = 10;
	obj1.score.math= 50;

在这里插入图片描述
深层克隆

	$.fn.extend(true, obj, obj1);
	obj.score.Chinese = 10;
	obj1.score.math = 50;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值