这两种JavaScript / JQuery技术有什么区别?

时间:2014-09-04 19:19:04

标签: javascript jquery object

这两种方法有什么区别?我想更好地理解Jquery和JavaScript。提前谢谢SO!

        /**
        * What is the difference between these two techniques?
        */

        /* Using JQuery Extend */

        var names = {name1 : 'Nicholas', name2: 'Bobby'}
        var ages = {age1 : '27', age2: '32'}
        var profile = $.extend(names, ages);
        console.log(profile.name1, profile.age1)

        /* By filling a blank object with the combined dataset */

        var names = { name1 : 'Nicholas', name2 : 'Bobby'}
        var ages = { age1 : '27', age2 : '32'}
        var profile = {};
        profile.names = names;
        profile.ages = ages;
        console.log(profile.names.name1, profile.ages.age1)

3 个答案:

答案 0 :(得分:2)

$.extend合并两个对象。第一个代码的结果是包含两个对象的所有属性的单个对象:

{name1 : 'Nicholas', age1: '27', name2: 'Bobby', age2: '32'}

它还将其第一个参数修改为副作用。因此,此结果将同时包含profilenames。要防止修改第一个参数,请使用$.extend({}, names, ages)

要从中访问其中一个值,您可以使用profile.name1profile.age2

您的第二个代码会创建一个新对象,其中包含前两个对象作为其中的不同属性:

{ names: {name1 : 'Nicholas', name2: 'Bobby'},
  ages: { age1 : '27', age2 : '32'}
}

要从中访问其中一个值,您可以使用profile.names.name1profile.ages.age2

答案 1 :(得分:1)

在GitHub中查看jQuery.fn.extend()的{​​{3}}: 它解析给定的对象并生成整个对象的Source。因此,当对象具有子对象时,它们也会被深度复制。 用法解释为deep copy如下:

  

描述:将两个或多个对象的内容合并到第一个对象中。

    var names = { name1 : 'Nicholas', name2 : 'Bobby'}
    var ages = { age1 : '27', age2 : '32'}
    var profile = {};
    profile.names = names;
    profile.ages = ages;

根本不复制。它将这些对象放在一个super - 或wrapping - 对象中。

非常不同的是,在extending之后,两个对象都是独立的,第二种方式不是。见here。新对象仅包含旧对象的引用,而不包含deep copy

答案 2 :(得分:0)

jQuery extend方法结合了名称和年龄对象。第二个示例创建一个新对象,其中前面的对象为键。