jQuery.extend
1.jQuery.fn.extend 与 jQuery.extend 区别?
理解为jQuery.extend 将合并后的对象添加在jQuery全局中;
jQuery.fn.extend 将合并后的对象添加在jQuery实例化的对象中;
有没有详细的实例化解释??
2.jQuery.extend([deep],src,obj1,obj2)?
1)
jQuery.extend(true,{city:'Bj',name:'Mark'},{city:'Sh',job:'Fe'});
jQuery,extend(false,{city:'Bj',name:'Mark'},{city:'Sh',job:'Fe'});
//true
return {city:'Sh',job:'Fe',name:'Mark'};
//false
return {city:'Sh',job:'Fe'};
当true时,可否理解为 有相同属性存在时保留?
2)
jQuery.extend(true,{city:'Bj',name:'Mark'},{color:'Red',job:'Fe'});
jQuery,extend(false,{city:'Bj',name:'Mark'},{color:'Red',job:'Fe'});
//true and false
return {color:'Red',job:'Fe'};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
做个实验
可以看到,第一个参数
false
和第一个参数不是布尔型的情况是一样的。官方文档说,第一个参数
false
的时候如果想要只拷贝目标对象存在的属性,忽略不存在的的属性,请用 lodash。所以这里的false
的不带这个参数是一样的效果。如果是
true
表示深度拷贝,深度的意思就是,如果源对象中某个属性是对象,而将这个对象拷贝一份赋值,而不是简单的赋值其引用。上面实验中的c
就很说明问题了,c.props === a.props
的结果是false
,说明其props
属性是新建的一个对象。楼主的demo错了啊
建议看看官方文档的demo
或者这里jQuery插件开发总结
1.依然是官方文档,jQuery.extend()是合并2个对象。并且返回一个新的对象。jQuery.fn.extend()是对jQuery实例方法扩充。类似于:$.ajax()这样的全局方法:
2.官方文档说了,第一个参数不支持传入false,传入true的时候是递归合并
意思是:如果你这个对象下面还有对象依然可以用递归的方式查到,然后进行合并,合并的方式是一样的楼上给了一个官方的例子可以看。(也就是深拷贝)
不管你有没有带[deep]参数,合并的方式是一致的。
总结一下这两个方法基本都应用在写jQuery插件上面。不同的是第一个方法已经做好了闭包避免变量的污染。第二个方法还需要自己去创建(function($) { $.fn.func = function(){} });这样的闭包,同样第二个方法为更加灵活一些,方便理解。
1.传递一个参数:向jquery本身扩展
2.传递两个参数,第二个的参数的属性会覆盖第一个参数的属性,并返回第一个参数.
3.传递三个参数,三个参数都是对象的情况下,第二个和第三个的属性都会合并到第一个对象上(注意此时不会做递归覆盖),并返回第一个对象;
4.传递三个参数,第一个参数是bool型,extend函数会做递归处理,将第三个对象的属性覆盖到第二个对象上,并返回第二个对象;
最后,
$.fn.extend
是向jquery.fn
扩展方法或者属性用的。