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());