1. 使用场景
当我们要封装一个方法时,我们可能需要在方法中设置一些默认值,在调用这个方法时我们传进来的参数又要能够覆盖默认值,这时我们就需要使用extend()方法
2. 使用方法
extend(target,objc1[,objcN]);
- target:目标对象
- objc1:需要合并的对象
- objcN:需要合并的对象(可以一次合并多个对象)
extend(deep,target,objc1[,objcN]);
- deep:为true则是递归合并
- target:目标对象
- objc1:需要合并的对象
- objcN:需要合并的对象(可以一次合并多个对象)
3. 上面两个方法的区别
- 没有deep参数时
var target = {
company: "dcloud",
product: {
mui: "小巧、高效"
}
}
var obj1 = {
city: "beijing",
product: {
HBuilder: "飞一样的编码"
}
}
mui.extend(target,obj1);
console.log(JSON.stringify(target));
输出
{
"company": "dcloud",
"product": {
"HBuilder": "飞一样的编码"
},
"city": "beijing"
}
其中product字段被obj1覆盖了
- 有deep参数时
var target = {
company:"dcloud",
product:{
mui:"小巧、高效"
}
}
var obj1 = {
city:"beijing",
product:{
HBuilder:"飞一样的编码"
}
}
mui.extend(true,target,obj1);
console.log(JSON.stringify(target));
输出
{
"company": "dcloud",
"product": {
"mui":"小巧、高效",
"HBuilder": "飞一样的编码"
},
"city": "beijing"
}
其中product字段合并了
4. 注意
在HBuilder中使用extend()方法时会有一个提示

提示中将deep属性放在了最后
这是错误的,要将deep参数放在最前面,像文档中写的那样,不然最后的结果会按照没有deep参数处理
网友评论