本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。
源码共读前言
本文目标
- 学习 omit.js 剔除对象中的属性
- 学会通过测试用例调试源码
源码
先看下omit仓库的文件目录,值得学习的简易模板
核心源码
(用途:实用工具函数创建一个删除某些字段的对象的浅副本--来自omit作者)
function omit(obj, fields) {
// eslint-disable-next-line prefer-object-spread
const shallowCopy = Object.assign({}, obj);
for (let i = 0; i < fields.length; i += 1) {
const key = fields[i];
delete shallowCopy[key];
}
return shallowCopy;
}
export default omit;
omit库使用示例
var omit = require('omit.js');
omit({ name: 'Benjy', age: 18 }, [ 'name' ]); // => { age: 18 }
知识点
1. Object.assign
从一个或多个源对象复制到目标对象,返回修改后的对象 更多参考Mdn
-
语法:
Object.assign(target, ...sources) -
针对所有可枚举(
Object.propertyIsEnumerable()返回 true)和自有(Object.hasOwnProperty()返回 true)属性,所以对象当然可以使用此方法 -
浅拷贝 因为假如源对象是一个对象的引用,它仅仅会复制其引用值,要想深拷贝,参考lodash库
-
深拷贝的一种形式:
// Deep Clone obj1 = { a: 0 , b: { c: 0}}; let obj3 = JSON.parse(JSON.stringify(obj1)); obj1.a = 4; obj1.b.c = 4; console.log(JSON.stringify(obj3)); // { "a": 0, "b": { "c": 0}} -
实际应用:
let res = Object.assign({}, source1, source2,...)
2. 前端单元调试
针对一个成熟的库,单元测试必不可少
配置参照 -- 来自若川
-
auto-attach一步到位,开启智能模式
-
打断点
-
点击调试(下图),选择test选项
更多参考
-
开启代码调试
3. 来自大佬基于omit的参考学习--来自那个少年
- 一个更广泛的单元测试库 Jest
- omit库代码重写为ts并支持jest测试
- npm发包
4. .eslintrc.js配置
作为eslint代码规范的配置文件比较熟悉,仍有值得学习的地方
先应用来自fabric库的代码规范,再进行补充,妙啊。
总结
- omit库使用,有机会应用至项目中
- Object.assign() 使用,学会扩展
- lodash工具库,项目中已经在使用,真香警告,相恨见晚
- Jest单元测试库继续学习
- father库打包工具继续学习
- npm发包也要开始实践