这两种方法有什么区别?我想更好地理解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)
答案 0 :(得分:2)
$.extend
合并两个对象。第一个代码的结果是包含两个对象的所有属性的单个对象:
{name1 : 'Nicholas', age1: '27', name2: 'Bobby', age2: '32'}
它还将其第一个参数修改为副作用。因此,此结果将同时包含profile
和names
。要防止修改第一个参数,请使用$.extend({}, names, ages)
。
要从中访问其中一个值,您可以使用profile.name1
或profile.age2
。
您的第二个代码会创建一个新对象,其中包含前两个对象作为其中的不同属性:
{ names: {name1 : 'Nicholas', name2: 'Bobby'},
ages: { age1 : '27', age2 : '32'}
}
要从中访问其中一个值,您可以使用profile.names.name1
或profile.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方法结合了名称和年龄对象。第二个示例创建一个新对象,其中前面的对象为键。