在javascript中的$.extend(true,{},obj)中,';真的';?

在javascript中的$.extend(true,{},obj)中,';真的';?,javascript,Javascript,比较两个构造函数时: function C(options, id) { this.id = id; // Extend defaults with provided options this.options = $.extend(true, {}, { greeting: 'Hello world!', image: null }, options); }; 及 true变量是否在$.extends之后必需 第二,语句th

比较两个构造函数时:

  function C(options, id) {
    this.id = id;

    // Extend defaults with provided options
    this.options = $.extend(true, {}, {
      greeting: 'Hello world!',
      image: null
    }, options);


  };

true
变量是否在
$.extends
之后必需


第二,语句
this.$=$(this)
是否必要,因为第一个构造函数没有它,它们也做同样的事情。

如果
options
有任何嵌套对象,则
true
是必要的,如果希望对它们进行深度复制,而不是让新对象引用与原始对象相同的嵌套对象

简单的例子:

var inner = {
    foo: "bar"
};
var outer = {
    inner: inner
};
var shallowCopy = $.extend({}, outer);
var deepCopy = $.extend(true, {}, outer);
console.log(shallowCopy.inner.foo); // "bar"
console.log(deepCopy.inner.foo);    // "bar"
outer.inner.foo = "updated";
console.log(shallowCopy.inner.foo); // "updated"
console.log(deepCopy.inner.foo);    // "bar"
实时复制:

var内部={
傅:“酒吧”
};
外部变量={
内:内
};
var shallowCopy=$.extend({},outer);
var deepCopy=$.extend(true,{},outer);
console.log(shallwcopy.internal.foo);//“酒吧”
console.log(deepCopy.internal.foo);//“酒吧”
outer.inner.foo=“已更新”;
console.log(shallwcopy.internal.foo);//“更新”
console.log(deepCopy.internal.foo);//“条形图”

当您需要
true
提供的文档中描述的行为时,这是必需的。和
this.$=$(this)是必需的。这些都不是绝对需要的。您需要决定在每种情况下代码需要什么。
var inner = {
    foo: "bar"
};
var outer = {
    inner: inner
};
var shallowCopy = $.extend({}, outer);
var deepCopy = $.extend(true, {}, outer);
console.log(shallowCopy.inner.foo); // "bar"
console.log(deepCopy.inner.foo);    // "bar"
outer.inner.foo = "updated";
console.log(shallowCopy.inner.foo); // "updated"
console.log(deepCopy.inner.foo);    // "bar"