嘿伙计们我刚刚浏览了parallax.js
的代码,我遇到了以下代码:
$.extend(this, DEFAULTS, options, data);
我从未见过上面使用的$.extend()
,我看过像:
$.extend({}, DEFAULTS, options, data);
上面的例子中this
是一个jQuery对象,所以我不认为上面做了什么错误,但是有人可以告诉我为什么特别有用吗?一个例子将非常有用,因为我真的非常理解为什么使用上述代替$.extend({}, DEFAULTS, options, data);
。
可以找到代码行 HERE 。
谢谢。
答案 0 :(得分:2)
根据 jQuery documentation ,扩展将“...将两个或多个对象的内容合并到第一个对象。”
当两个或多个对象参数提供给$ .extend()时, 所有对象的属性都将添加到目标对象中。 忽略null或undefined的参数。
目标对象/第一个传递的对象将始终使用extend进行修改,并从函数返回。
但是如果对象声明保持不变,那么我们将{}
对象作为第一个参数传递。
1 var object = $.extend({}, object1, object2,....,objectn);
要始终牢记几点:
特定于您的案例:
当.extend()
收到两个或多个对象时,它会获取第一个对象,并在其中添加其他对象中定义的方法和变量。
defaults = { size: 3 };
options = { height: 6 };
var opts = $.extend(defaults, options)
// 'defaults' receives the methods and variables defined in 'options'
// opts == defaults == { size: 3, height: 6 }
// options == { height: 6 };
如果第一个对象为空,它将在新对象中添加方法和变量。当我们想要对几个对象中定义的方法进行分组而不修改任何对象时,这非常有用。
像这样:
var opts = $.extend( {}, defaults, options)
// 'opts' gets all methods and variables defined in 'defaults' and 'options',
// neither of them get modified.
// opts == { size: 3, height: 6 }
// defaults == { size: 3 };
// options == { height: 6 };
答案 1 :(得分:0)
我不是extend
方法的导出,但我所知道的让我觉得这是解释:
$.extend({}, DEFAULTS, options, data);
版本将默认值复制到空对象中,请参阅this question,了解人们为何会这样做。
$.extend(this, DEFAULTS, options, data);
会将默认值复制到this
引用的对象中。
我可以看到这被用作更新对象的默认值/选项/数据的方法,而不必指定可能已经设置的每个属性,这就是空对象版本会强制你做的事情。情况。
答案 2 :(得分:0)
你说this
“...毕竟是一个jQuery对象。看一下你引用的源代码中的line 489:
plugin = new Plugin(this, value);
插件被用作构造函数。这意味着this
是对正在构造的对象的引用。因此,$.extend
用于将成员按顺序从DEFAULTS
,options
和data
对象复制到正在构造的对象中(因此options
覆盖{{DEFAULTS
1}}和data
会覆盖options
)。