對象之間的繼承之淺拷貝和深拷貝(jquery方法$.extend())

在擴展jquery方法或者開發jquery插件的時候,咱們常常會用到的一個方法$.extend()javascript

語法:jQuery.extend( [deep ], target, object1 [, objectN ] )java

這裏不說怎麼用,做用就是兩個對象之間的繼承,能夠簡單的理解爲兩個對象的合併jquery

第一個參數[deep],默認是false,也就是淺拷貝jquery插件

若是寫爲true,就是深拷貝了(至於淺拷貝和深拷貝是什麼自行腦補...)測試

下面簡單的說下對象之間繼承的原理(實際上是直接上代碼)插件

<script type="text/javascript">
    //對象之間的繼承  淺拷貝
    function extendCopy(p,c){
        var c = c || {};
        for(var i in  p){
            c[i] = p[i];
        }
        c.uber = p; //經過.uber 調用父度對象的方法
        return c;
    }
    //對象之間的繼承 深拷貝
    function deepCopy(p,c){
        var c = c || {};
        for(var i in p){
            if(typeof(p[i] === 'object')){
                c[i] = (p[i].constructor === Array) ? [] : {};
                deepCopy(p[i],c[i])
            }else{
                c[i] = p[i]
            }
        }
        c.uber = p;
        return c;
    }
    //測試淺拷貝
    var dad = {
        say:function(){
            console.log("I am parent.");
        }
    }

    var son = extendCopy(dad);
    son.say(); //I am parent.
    son.say = function(){ //son繼承的是dad對象的引用  當修改son的方法 等同於修改了原對象
        console.log("change say.");
    }
    son.say(); //change say.
    dad.say();//change say. 由於修改son的say 原對象的say被修改了
    //測試深拷貝
    var animal = {
        eat:function(){
            console.log("父對象吃的方法")
        }
    }

    var dog = deepCopy(animal);

    dog.eat = function(){
        console.log("子對象吃的方法");
    }
    dog.eat(); //子對象吃的方法
    animal.eat(); //父對象吃的方法
</script>
相關文章
相關標籤/搜索