jQuery插件开发之extend函数
偶然间看到jQuery插件开发,只看懂了一部分,不过觉得蛮有用的,八个字,“相同‘覆盖’,不同合并”的原理
1、jQuery.extend()
把两个或者更多的对象合并到第一个当中,扩展jQuery方法
- jQuery.extend( target, object1, …objectN )
接收多个对象作为参数,如果只有一个参数,则把这个对象的属性方法附加到jQuery上,如果含有多个参数,则把后面的对象的属性和方法附加到第一个对象上。
var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"})
那么合并后
result={name:"Jerry",age:21,sex:"Boy"}
- jQuery.extend( deep, target, object1, …objectN )
第一个参数为boolean类型,细说的话,分为深复制(true),浅复制(false) ####深层复制(一层一层往下复制直到最底层)
var result=$.extend( true, {},
{ name: "John", location: {city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} } );
结果是
result={name:"John",last:"Resig",location:{city:"Boston",state:"MA",county:"China"}}
####浅层复制(只复制顶层的非object元素)
var result=$.extend( false, {},
{ name: "John", location: {city: "Boston",county:"USA"} },
{ last: "Resig", location: {state: "MA",county:"China"} } );
结果是
result={name:"John",last:"Resig",location:{state:"MA",county:"China"}}
2、jQuery.fn.extend()
把对象挂载到jQuery的prototype属性,来扩展一个新的jQuery实例方法
- jQuery.fn.extend( object )
HTML代码
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.fn.extend demo</title>
<style>
label {
display: block;
margin: .5em;
}
</style>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<label><input type="checkbox" name="foo"> Foo</label>
<label><input type="checkbox" name="bar"> Bar</label>
</body>
</html>
Javascript代码
<script>
jQuery.fn.extend({
check: function() {
// this.each()返回一个jQuery对象,
return this.each(function() {
this.checked = true; // 这儿this指的是一个dom对象
});
},
uncheck: function() {
return this.each(function() {
this.checked = false;
});
}
});
// Use the newly created .check() method
$( "input[type='checkbox']" ).check(); // 你可以理解为‘dom对象的集合’
</script>
通常我们在调用的时候,常见的写法是这样的
(function( $ ){
// 为扩展jQuery类本身.为类添加新的方法
$.extend(object);
// 给jQuery对象添加方法
$.fn.extend(object);
})(jQuery)