$.extend()和$.fn.extend()的区别

jQuery.extend({

foo: function () {

alert('This is a test. This is only a test.');

}, bar: function (param) {

alert('This function takes a parameter, which is "' + param + '".');

}

});

$.extend();->this->this.foo->$.foo(); 扩展工具方法

2

(function ($) {

$.fn.extend({

pluginName: function (opt, callback) {

// Our plugin implementation code goes here.

}

})

})(jQuery);扩展jq实例的方法

$.fn.extend()->this->$.fn->this.foo-$().foo();面向对象

当写多个对象自变量的时候,后面的对象都是扩展到第一个对象身上

var a={};

$.extent(a,{name:'hello',{age:30};})

深拷贝和浅拷贝

首先jQuery的extend可以深拷贝也可以浅拷贝。\jQuery.extend第一个参数可以是布尔值,用来设置是否深度拷贝的:

jQuery.extend(true, { a : { a : "a" } }, { a : { b : "b" } } );



深拷贝指的是对象属性所引用的对象全部进行新建对象复制,以保证深复制的对象的引用图不包含任何原有对象或对象图上的任何对象,隔离出两个完全不同的对象图。

简单讲,浅拷贝就是复制一份引用,所有引用对象都指向一份数据,并且都可以修改这份数据。深拷贝则是复制变量值,对于非基本类型的变量,则递归至基本类型变量后,再复制

作为一个新鸟,我是这样理解的:

浅复制--->就是将一个对象的内存地址的“”编号“”复制给另一个对象。

深复制--->实现原理,先新建一个空对象,内存中新开辟一块地址,把被复制对象的所有可枚举的(注意可枚举的对象)属性方法一一复制过来,注意要用递归来复制子对象里面的所有属性和方法,直到子子.....属性为基本数据类型。


总结,深复制理解两点,1,新开辟内存地址,2,递归来刨根复制。



作者:百撕不得骑姐
链接:http://www.zhihu.com/question/23031215/answer/107144782
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

今天又被面试官问到这个问题了,事后来google一下,知乎这个问题竟然排在第四

 

var cloneObj = function(obj){
    var str, newobj = obj.constructor === Array ? [] : {};
    if(typeof obj !== 'object'){
        return;
    } else if(window.JSON){
        str = JSON.stringify(obj), //系列化对象
        newobj = JSON.parse(str); //还原
    } else {
        for(var i in obj){
            newobj[i] = typeof obj[i] === 'object' ? 
            cloneObj(obj[i]) : obj[i]; 
        }
    }
    return newobj;
};


这个函数可以深拷贝 对象和数组

你可能感兴趣的:($.extend()和$.fn.extend()的区别)