【源码读】【若川视野 x 源码共读】第36期 | A24 | omit.js 剔除对象中的属性

115 阅读2分钟

本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。

源码共读前言

本文目标

  • 学习 omit.js 剔除对象中的属性
  • 学会通过测试用例调试源码

源码

先看下omit仓库的文件目录,值得学习的简易模板

image.png

核心源码 (用途:实用工具函数创建一个删除某些字段的对象的浅副本--来自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,...)

  • Object.assign扩展阅读

2. 前端单元调试

针对一个成熟的库,单元测试必不可少

配置参照 -- 来自若川

  • auto-attach一步到位,开启智能模式

  • 打断点 image.png

  • 点击调试(下图),选择test选项 image.png 更多参考

  • 开启代码调试

3. 来自大佬基于omit的参考学习--来自那个少年

  1. 一个更广泛的单元测试库 Jest
  2. omit库代码重写为ts并支持jest测试
  3. npm发包

4. .eslintrc.js配置

作为eslint代码规范的配置文件比较熟悉,仍有值得学习的地方

image.png

先应用来自fabric库的代码规范,再进行补充,妙啊。

总结

  1. omit库使用,有机会应用至项目中
  2. Object.assign() 使用,学会扩展
  3. lodash工具库,项目中已经在使用,真香警告,相恨见晚
  4. Jest单元测试库继续学习
  5. father库打包工具继续学习
  6. npm发包也要开始实践

参考文章

1、Object.assign Mdn

2、Object.assign扩展阅读

3、来自大佬基于omit的参考学习--那个少年