element-ui merge.js和shared.js文件源码学习
在看input组件之前,先看下他提前引入的模块,migrating.js和emitter.js前面都讲解过了,这儿看下两个utils中的两个js文件。
一、merge.js
文件直接export出一个function,这个fun中,嵌套了两层循环。
先看下第一层循环,显然从形参target之后开始遍历,并对这些参数做了检测。 第二层循环这些引用类型的属性,并用hasOwnProperty保证这些属性是自有属性。如果该值不是undefined,就赋值到target的同名属性下。
所以这merge.js就是用于对象合并的,并且是浅拷贝。
// merge拷贝函数,将target之后的属性按键值赋值到target下
// 若该参数在target中,则会被覆盖
// 是浅拷贝,注意引用关系
export default function(target) {
// 从target之后开始遍历参数
for (let i = 1, j = arguments.length; i < j; i++) {
// 检测参数,排除false类(undefined等)的参数
let source = arguments\[i\] || {};
// 遍历循环参数
for (let prop in source) {
// in会遍历原型上的属性,用hasOwnProperty确定是source自己的属性
if (source.hasOwnProperty(prop)) {
let value = source\[prop\];
// 若是source自己属性,且不是undefined,则添加到target的prop的属性下
if (value !== undefined) { // 仅判断自身,注意被覆盖的问题
target\[prop\] = value; // 没有继续遍历value的层级,当对象时,会有引用关系
}
}
}
}
return target;
};
二、shared.js
该文件下有两个方法,都比较的简单:
isDef
export function isDef(val) {
// 不能为undefined且不能等于null
return val !== undefined && val !== null;
}
判断参数不是undefined且不是null,判断值是不是已经定义了(表面可以这么理解)。
isKorean
export function isKorean(text) {
const reg = /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;
return reg.test(text);
}
该方法则是取判断对应字符是不是含有南北朝鲜字符(朝鲜和韩国)。