第一种:变量
function example(a,b){
var a = arguments[0] ? arguments[0] : 1;//设置参数a的默认值为1
var b = arguments[1] ? arguments[1] : 2;//设置参数b的默认值为2
return a+b;
}
或者
function example(){
var a = arguments[0] ? arguments[0] : 1;//设置第一个参数的默认值为1
var b = arguments[1] ? arguments[1] : 2;//设置第二个参数的默认值为2
return a+b;
}
第二种:原型链
function fn(opts) {
var DefaultConf = function() {};
DefaultConf.prototype = {
name: ‘lc‘,
age: 18
}
defaultConf = new DefaultConf();
for(var i in opts) {
defaultConf[i] = opts[i]
}
}
这种方法缺点是在函数内声明了函数,会引发一系列纠结问题。
第三种:jquery的$.extend()(浅拷贝)
示例:
function example(setting){
var defaultSetting={
name:‘貂蝉‘,
age:‘30‘,
sex:‘女‘,
phone:‘13611876347‘,
QQ:‘10086‘,
birthday:‘1949.10.01‘
};
$.extend(defaultSetting,settings);
var message=‘姓名:‘+defaultSetting.name
+‘,性别:‘+defaultSetting.sex
+‘,年龄:‘+defaultSetting.age
+‘,电话:‘+defaultSetting.phone
+‘,QQ:‘+defaultSetting.QQ
+‘,生日:‘+defaultSetting.birthday
+‘。‘;
alert(message);
}
jquery的$.extend()
的源码:
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[ 0 ] || {},
i = 1,
length = arguments.length,
deep = false;
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
// Skip the boolean and the target
target = arguments[ i ] || {};
i++;
}
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !isFunction( target ) ) {
target = {};
}
// Extend jQuery itself if only one argument is passed
if ( i === length ) {
target = this;
i--;
}
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( ( options = arguments[ i ] ) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
// Recurse if we‘re merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
( copyIsArray = Array.isArray( copy ) ) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && Array.isArray( src ) ? src : [];
} else {
clone = src && jQuery.isPlainObject( src ) ? src : {};
}
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
// Don‘t bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
// Return the modified object
return target;
};
第四种: es6的语法
- 解构
Object.assign()