这里我们传入了4个参数,然后
getOpt()返回第一个参数的值。从运行的得到结果我们可以看到,属性值永远是最后一个属性的值。还有很重要的一点,
$.extend()其实是有返回值的,返回的就是修改后的第一个参数的值。如我们可以把上面的函数修改成这样:
function getOpt(target, obj1, obj2, obj3){
var result = $.extend(target, obj1, obj2, obj3);
return result; // // result即修改后的target值
}若我们传入的参数不想被修改,我们可以用一个空对象来作为第一个参数,然后获取
$.extend()的返回值:
function getOpt(target, obj1, obj2, obj3){
var result = $.extend({}, target, obj1, obj2, obj3);
return result; // // result即为{}修改后的值
}1.2 为JQUERY扩展方法或属性
刚才我们在1.1中讲的
$.extend()的例子都是传了两个或两个以上的参数,但其实只有一个参数是必须的。若只传一个参数会怎样呢。如果只有一个参数提供给
$.extend() ,这意味着目标参数被省略。在这种情况下,jQuery对象本身被默认为目标对象。这样,我们可以在jQuery的命名空间下添加新的功能。这对于插件开发者希望向 jQuery 中添加新函数时是很有用的。
$.extend({
_name : 'wenzi',
_getName : function(){
return this._name;
}
})$._name; // wenzi
$._getName(); // wenzi
这样我们就为jQuery扩展了_name属性和_getName方法。
1.3 深度拷贝和浅度拷贝
针对什么是深度拷贝,什么是浅度拷贝,我们先来看一个简单的例子。
var obj = {name:'wenzi', sex:'male'};
var obj1 = obj; // 赋值
obj1.name = 'bing';
console.log(obj.name); // bing我们修改了obj1中的name值,结果obj中的值也跟着发生了变化,这是为什么呢。其实这就是浅度拷贝:这仅仅是将obj对象的引用地址简单的复制了一份给予变量 obj1,而并不是将真正的对象克隆了一份,因此obj和obj1指向的都是同一个地址。当修改obj1的属性或给obj1添加新属性时,obj都会受到影响。
可是如果变量的值不是对象和数组,修改后面的变量是不会影响到前面的变量:
var s = 'hello';
var t = s;
t = 'world';
console.log(s); // hello那么深度拷贝就不是拷贝引用地址,而是实实在在的复制一份新对象给新的变量。 在上面使用$.extend()中,都是使用的浅度拷贝,因此若后面的参数值是object类型或array类型,修改_default(target)的值,就会影响后面参数的值。










