Jquery的扩展方法extend是我们在写插件的过程中常用的方法,该方法有一些重载原型,下面来看看详细的介绍吧。
通常我们使用jquery的extend时,大都是为了实现默认字段的覆盖,即若传入某个字段的值,则使用传入值,否则使用默认值。
如下面的代码:
function getOpt(option){ var _default = { name : 'wenzi', age : '25', sex : 'male' } $.extend(_default, option); return _default;}getOpt(); // {name: "wenzi", age: "25", sex: "male"}getOpt({name:'bing'}); // {name: "bing", age: "25", sex: "male"}getOpt({name:'bing', age:36, sex:'female'}); // {name: "bing", age: 36, sex: "female"}
那现在我们就得需要知道这个extend具体是怎么实现的了,除了实现上面的功能,还有其他作用么?那肯定是有的啦,否则我也不会问那句话了((⊙﹏⊙)b)。我们先来看看extend主要有哪些功能,然后再看实现这些功能的原理。
1. extend能实现的功能
其实从extend的含义里,我们就能知道extend是做什么的了。extend翻译成汉语后就是:延伸、扩展、推广。
1.1 将两个或更多对象的内容合并到第一个对象
我们来看看$.extend()提供的参数:jQuery.extend( target [, object1 ] [, objectN ] )
,extend方法需要至少传入一个参数,第一个必需,后面的都是可选参数。若传给extend是两个或两个以上的参数都是对象类型,那么就会把后面所有对象的内容合并给target(第一个对象)上。
我们再来看看上面的例子:
function getOpt(option){ var _default = { name : 'wenzi', age : '25', sex : 'male' } `$.extend(_default, option);` return _default;}
$.extend()
中接收了两个参数_default和option,那么extend方法执行时,就会把option对象上字段的值全给了_default。于是_default上设置的默认值就会被option上的值覆盖。当然,若option上没有这个字段,就不会覆盖_default上字段的值。
上面函数中的extend,只是传入了两个参数,那传的参数再更多一些呢:
function getOpt(target, obj1, obj2, obj3){ $.extend(target, obj1, obj2, obj3); return target;}var _default = { name : 'wenzi', age : '25', sex : 'male'}var obj1 = { name : 'obj1'}var obj2 = { name : 'obj2', age : '36'}var obj3 = { age : '67', sex : {'error':'sorry, I dont/'t kown'}}getOpt(_default, obj1, obj2, obj3); // {name: "obj2", age: "67", sex: {error: "sorry, I dont't kown"}}
这里我们传入了4个参数,然后getOpt()
返回第一个参数的值。从运行的得到结果我们可以看到,属性值永远是最后一个属性的值。
还有很重要的一点,$.extend()
其实是有返回值的,返回的就是修改后的第一个参数的值。如我们可以把上面的函数修改成这样:
新闻热点
疑难解答
图片精选