对象之间的继承之浅拷贝和深拷贝(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>
相关文章
相关标签/搜索