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

官方解释:
jQuery.extend()
Merge the contents of two or more objects together into the first object
把两个或者更多的对象合并到第一个当中
jQuery.fn.extend()
Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods
把对象挂载到jQuery的prototype属性,来扩展一个新的jQuery实例方法

他们可以用来在jQuery上扩展方法,只不过目标不同而已
举个例子:

	<!DOCTYPE html>
	<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<button>点击弹出</button>
	</body>
	</html>
	<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
	$.extend({
		abc:function () {
			alert('???');
		}
	})
	$('button').click(function () {
		$.alert();
	})

这边写了一个abc方法用于弹出一个窗口,直接用$.abc();就可以调用了

	$.fn.extend({
		abc:function () {
			alert('???');
		}
	})
	$('button').click(function () {
		$.alert();
	})

但是用$.fn.extend()扩展就毫无作用了,为什么?
因为$本质上就是一个类,如果abc这个方法直接给到类,那当然可用,但是给到$.fn上怎么可能直接用呢?
那我们如何才能使用到这个abc方法呢?
源码中我们可以了解到:

	jQuery.fn = jQuery.prototype = {
	      init:funtion(selector,context){
	            //..... 
	     }
	}

jQuery.fn.extend()扩展的是原型上面的方法,即jQuery对象的方法
jQuery对象即是类的实例化

	$('button').click(function () {
		$('button').abc();
	})

这样就可以使用了
总结一下:
$.extend() 是扩展全局函数的
$.fn.extend() 一般用来给具体的实例对象来调用的
大部分的插件,都是用$.fn.extend() 来扩展的

两者的语法:
$.extend( [deep ], target, object1 [, objectN ] )
$.fn.extend( object )

	var obj1 = {
		a:10
	};
	var obj2 = {
		a:{
			b:20
		}
	}

浅克隆

	$.extend(obj1, obj2);
	obj1.a.b = 30;
	console.log(obj1.a.b,obj2.a.b); // 30 30

深克隆

	$.extend(true,obj1, obj2);
	obj1.a.b = 30;
	console.log(obj1.a.b,obj2.a.b); // 30 20
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值