锁定老帖子 主题:jQuery源码分析-extend函数
精华帖 (1) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-22
# //只有当第一个实参为true时,即需要进行深度拷贝时,执行以下分支
# if (typeof target === "boolean") { 这一句应该只是说判断target类型是否为boolean值。 就算target为false 这个if也是能通过的。 验证:alert(typeof false==='boolean'); 打印true |
|
返回顶楼 | |
发表时间:2010-07-22
adamed 写道 # //只有当第一个实参为true时,即需要进行深度拷贝时,执行以下分支 # if (typeof target === "boolean") { 这一句应该只是说判断target类型是否为boolean值。 就算target为false 这个if也是能通过的。 验证:alert(typeof false==='boolean'); 打印true 回ls: 从语义上看起来,这句代码是检查boolean类型的。 但再看看函数的第一句代码: var target = arguments[0] || {} 当第一个参数为false时,target是{},而不是boolean; 因此,只有当第一个参数为true时才会执行。 所以这个分支也可以改为 if(true === target) { //其它代码... } |
|
返回顶楼 | |
发表时间:2010-07-22
稍微为楼主补充几句:
# if (length === i) { # target = this; # --i; # } 上面的代码,为什么要有这句?楼主的注释意思上是没问题的,关键是为啥要这样写。 在jQuery的API文档上我们可以看到。extend作用是扩展对象,并且有专门一个地方说明可以用来扩展jQuery本身。 比如: jQuery.extend({ min: function(a, b) { return a < b ? a : b; }, max: function(a, b) { return a > b ? a : b; } }); 表示向jQuery中添加2个方法插件。 再比如: jQuery 代码: var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options); 结果: settings == { validate: true, limit: 5, name: "bar" } 这里就是拓展普通对象了。 那么如何区分哪个调用是扩展jQuery本身,哪个是扩展普通对象呢? 就看这个if是否为true,如果为true则target=this也就表示拓展jQuery本身。否则就是扩展普通对象 |
|
返回顶楼 | |
发表时间:2010-07-22
adamed 写道 稍微为楼主补充几句: # if (length === i) { # target = this; # --i; # } 上面的代码,为什么要有这句?楼主的注释意思上是没问题的,关键是为啥要这样写。 在jQuery的API文档上我们可以看到。extend作用是扩展对象,并且有专门一个地方说明可以用来扩展jQuery本身。 比如: jQuery.extend({ min: function(a, b) { return a < b ? a : b; }, max: function(a, b) { return a > b ? a : b; } }); 表示向jQuery中添加2个方法插件。 再比如: jQuery 代码: var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options); 结果: settings == { validate: true, limit: 5, name: "bar" } 这里就是拓展普通对象了。 那么如何区分哪个调用是扩展jQuery本身,哪个是扩展普通对象呢? 就看这个if是否为true,如果为true则target=this也就表示拓展jQuery本身。否则就是扩展普通对象 这里的确没有注释清楚,有待改善。 谢谢指教。 |
|
返回顶楼 | |
发表时间:2010-07-22
分析得太详细了,期待更多分析
|
|
返回顶楼 | |
发表时间:2010-07-26
感谢楼主的奉献,
分析写得很好,谢谢 ![]() |
|
返回顶楼 | |
发表时间:2010-12-26
分析得挺不错的,读懂熟透JQuery的源码,是开发插件的前提。
|
|
返回顶楼 | |