jQuery为开发插件提拱了两个方法分别是:·
1、jQuery.extend() or $.extend()函数用于将一个或多个对象的内容合并到目标对象;
语法:.extend( [deep ], target, object1 [, objectN ] )
案例1:属性
<body>
<div id="box"></div>
</body>
</html>
<script src="js/jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function(){
//第一个对象
var obj1={
name:"张旭",
health:{height:180,weight:77},
age:18
}
//第二个对象
var obj2={
health:{weight:80},
sex:"男"
}
//合并对象到jquery中
//将obj2合并到obj1中,
//deep:默认是false,浅拷贝:如果有重复的属性,后面会覆盖前面,但不会把height继承下来;
// $.extend(obj1,obj2);
//deep:true,深拷贝:如果有重复的属性,后面会覆盖前面,会把height继承下来;
//显示输出合并的数据
$.extend(true,obj1,obj2);
//显示
$("#box").append(JSON.stringify(obj1));
});
</script>
效果:
false
true
案例2:方法
<script src="js/jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function(){
//对象的方法
var obj ={
show:function(msg){
alert(msg);
}
}
// obj.show("hello!");
//将方法合并到jquery中
$.extend(obj);
//jquery-3.3.1.js:3827 Uncaught TypeError: $.show is not a function
//可以写成这样?
// $.show("mike");
//两数求和
// function adds(a,b){
// return a+b;
// }
//
// var sum =adds(10,20);
// console.log(sum);
//
$.extend({
adds:function(a,b){
return a+b;
}
});
// console.log($.adds(200,50));
//数组
var arrs=["张旭","何小杰","王守宝","胡文俊"];
//1遍历数组
// $.each(arrs, function(index,ele) {
// console.log(index,ele);
// });
//2自定义each2方法(数组名,函数(索引,元素))
// function each2(arr,fn){
// for(var index in arr){
// console.log(index,arr[index]);
// }
// }
//调用函数each2
// each2(arrs,function(){});
//3.
$.extend({
each2:function(arr,fn){
for(var index in arr){
fn(index,arr[index]);
}
}
})
//调用自己写的each2
$.each2(arrs, function(index,ele) {
console.log(index,ele);
});
});
</script>
案例3: 封装一个方法类
(1) 封装方法:
//对象
var units={
adds:function(a,b){ //两数求和
return a+b;
},
each2:function(arr,fn){ //遍历数据
for(var index in arr){
fn(index,arr[index]);
}
},
addzero:function(zero){ //不满足2位补0
return zero<10?'0'+zero:zero;
}
}
//合并
$.extend(units);
(2)调用:
<script src="js/jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script>
<!--引入外部脚本-->
<script src="js/unit.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function(){
console.log($.adds(10,50));
console.log($.addzero(9));
var arrs=["张旭","何小杰","王守宝","胡文俊"];
$.each2(arrs, function(index,ele) {
console.log(index,ele);
});
});
</script>
2、jQuery.fn.extend() or $.fn.extend() 函数为jQuery扩展一个或多个实例属性和方法
注意:jQuery.fn是jQuery的原型对象,其extend()方法用于为jQuery的原型添加新的属性和方法。这些方法可以在jQuery实例对象上调用
案例1:全选 or 全部选
<body>
<button>全选</button>
<button>反选</button><br />
<input type="checkbox" name="" id="" value="" />玩游戏<br />
<input type="checkbox" name="" id="" value="" />唱歌<br />
<input type="checkbox" name="" id="" value="" />看电影<br />
</body>
</html>
<script src="js/jquery-3.3.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(function(){
//循环遍历button
$("button").each(function(index,ele){
//判断是哪一个按钮
if(index==0){
//单击事件
$(this).click(function(){
//全选
$("input[type='checkbox']").check();
});
}else{
//单击事件
$(this).click(function(){
//全选
$("input[type='checkbox']").discheck();
});
}
});
//能否写成这样
// $("input[type='checkbox']").check();
// $("input[type='checkbox']").discheck();
//原生对象
$.fn.extend({
check:function(){
$(this).each(function(){
this.checked=true; //this:DOM对象
});
},
discheck:function(){
$(this).each(function(){
this.checked=false; //this:DOM对象
});
}
});
});
</script>