jQuery extend扩展

jQuery源码中的extend扩展:

1
2
3
jQuery.extend = jQuery.fn.extend = function () {
      ...
};

我们可以用$.extend去扩展自定义的对象,实现方式:

1,通过$.extend扩展

    /**

    * 扩展对象,override参数的作用是是否覆盖第一个对象中的已有属性,true时覆盖,false时不覆盖.

    * @param {Object}

    * @param {Boolean}

    * @return {Object}

    */

    $.extend = function (destination, source, override) {

        if (override === undefined) {

            override = true;

        }

        for (var property in source) {

            //如果override为true时(不提供此参数时也为true),则覆盖第一个对象的已有属性

            //如果override为false时且第一个对象destination的属性不存在source对象中,则不覆盖第一个对象的已有属性

            if (override || !(property in destination)) {

                destination[property] = source[property];

            }

        }

        //返回合并后的对象

        return destination;

    };

2,通过$.deepextend扩展

/**

    * 深度扩展对象--适用于对象的属性也是对象的情况

    * @param {Object}

    * @return {Object}

    */

    $.deepextend = function (destination, source) {

        for (var property in source) {

            var copy = source[property];//获取source属性值



            if (destination === copy) {

                continue;

            }



            //如果copy是一个对象,则递归调用(并传入copy参数),直到copy不是一个对象为止

            if (typeof copy === 'object') {

                destination[property] = arguments.callee(destination[property] || {}, copy); //递归调用

            //否则直接把copy赋值给destination对象的属性(此时与$.extend方法等价)

            } else {

                destination[property] = copy;

            }

        }

        return destination;

    };

3,通过$.fn.extend扩展

function fun(){}//定义一个类(函数)

 

//给该类原型上添加一个方法extned

fun.prototype.extend = function(obj){

    for(var a in obj)

        this[a] = obj[a];//注意:这里的this即是fun.prototype

}           

 

//调用extend方法给fun.prototype上添加属性,方法

fun.prototype.extend({name:"fun2",method1:function(){}})

 

//输出name,extend,method1

console.dir(new fun());

 

 

你可能感兴趣的:(jquery)