函数默认值的写法

如何给函数添加默认值

  • es5 可以根据函数参数类型typeof 、函数的个数位置 arguments对象来判断

    • 使用jq 的函数扩展 $.extend或其他函数库来扩展;

  • es6 的函数解构定义默认值
1
2
3
4
5
6
一般参数默认都是传一个对象;
function fn({a=21,b=4}={}){
console.log(a+b)
}
fn({a:400})

缺点就是如果参数很多这样传感觉不清爽

  • 使用对象新属性 Object.assign的合并功能
1
2
3
4
5
6
7
8
9
10
11
let obj={
x:11,
y:22
}
function ob(opts){
opts=Object.assign(obj,opts)
console.log(opts.x+opts.y)
}
ob({y:55})

使用 对象的扩展运算符 ... es2017开始支持

1
2
3
4
5
6
7
function fn (opts){
console.log(opts.x+opts.y)
}
let de={x:10,y:5}
let we={x:50}
fn({...de,...we})

扩展运算符的写法看起来更加简洁明了,其原理就是对象解构,然后属性重复的话后者覆盖前者。

扩展

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

所以其作用很广泛

  1. 为类(对象)添加属性和方法,可以方便扩展类和对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Object.assign(SomeClass.prototype, {
someMethod(arg1, arg2) {
···
},
anotherMethod() {
···
}
});
// 等同于下面的写法
SomeClass.prototype.someMethod = function (arg1, arg2) {
···
};
SomeClass.prototype.anotherMethod = function () {
···
};
  1. 克隆对象
  2. 合并多个对象
  3. 为属性指定默认值

参考

参考链接

热评文章