element源码阅读之对象拷贝

简介: 看了element源码里的对象拷贝的方法如下:

element源码阅读之对象拷贝



看了element源码里的对象拷贝的方法如下:


function merge(target) {
    // arguments 收集所有的参数
    for (let i = 1, j = arguments.length; i < j; i++) {
      let source = arguments[i] || {};
      for (let prop in source) { 
        if (source.hasOwnProperty(prop)) {
          let value = source[prop];
          if (value !== undefined) {
            target[prop] = value;
          }
        }
      }
    }
    return target;
  };
  var a = {
    name: 'csx',
  }
  const b = {
    age: 18
  }
  var ab = merge({}, a,b);
  console.log(ab) // {name: 'csx', age: 18}


涉及到了for in、hasOwnProperty知识点


for in 变量对象可枚举属性,包括继承来的


const triangle = { a: 1, b: 2, c: 3 };
function ColoredTriangle() {
  this.color = "red";
}
ColoredTriangle.prototype = triangle;
const obj = new ColoredTriangle();
for (const prop in obj) {
    console.log(`obj.${prop} = ${obj[prop]}`); 
    /* 打印内容如下,将继承来的  a b c属性也遍历出来了
    obj.color = red
    obj.a = 1
    obj.b = 2
    obj.c = 3
    */
}


for in 遍历属性时如何排除继承来的属性


const triangle = { a: 1, b: 2, c: 3 };
function ColoredTriangle() {
  this.color = "red";
}
ColoredTriangle.prototype = triangle;
const obj = new ColoredTriangle();
for (const prop in obj) {
 // if (Object.hasOwn(obj, prop)) {
  if (obj.hasOwnProperty(prop)) {
    console.log(`obj.${prop} = ${obj[prop]}`); 
    // obj.color = red  只有自身的color属性,a b c 继承来的排除掉了
  }
}


hasOwnProperty 判断是自身属性而不是继承的


const triangle = { a: 1, b: 2, c: 3 };
function ColoredTriangle() {
  this.color = "red";
}
ColoredTriangle.prototype = triangle;
const obj = new ColoredTriangle();  
console.log(obj.hasOwnProperty('color'))  // true   color是自身属性
console.log(obj.hasOwnProperty('a'))  // false
console.log(obj.hasOwnProperty('b')) // false
console.log(obj.hasOwnProperty('c')) // false
目录
相关文章
|
算法 数据挖掘 Python
Scipy 高级教程——稀疏矩阵
Scipy 高级教程——稀疏矩阵【1月更文挑战第10篇】
532 0
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
2058 0
|
JavaScript
axios拦截器:每次请求自动带上 token
axios拦截器:每次请求自动带上 token
535 0
使用正数和负数
【10月更文挑战第19天】使用正数和负数。
165 2
|
Linux KVM 虚拟化
如何判断一个linux机器是物理机还是虚拟机
使用`dmesg`检查&quot;Hypervisor detected&quot;可识别Xen PV虚拟机;`lscpu`显示&quot;Hypervisor vendor&quot;表明KVM虚拟化;&quot;Virtualization: VT-x&quot;指示实体机;`systemd-detect-virt`无法准确判断;`dmidecode -t 1`在某些节点上无法区分虚拟与实体。
818 0
|
Python
Python控制结构学习应用案例详解
Python控制结构包含条件语句、循环语句和异常处理。条件语句用if-elif-else判断数字正负;for循环示例输出1到10的整数,while循环计算1到10的和;异常处理用try-except-finally处理除零错误,打印提示信息并结束。
249 3
|
缓存 并行计算 API
龚大视频学习笔记:上帝视角看GPU(4)-完整的软件栈
龚大视频学习笔记:上帝视角看GPU(4)-完整的软件栈
684 0
每日一题,数组字符串的匹配问题
每日一题,数组字符串的匹配问题
|
Linux Shell 数据安全/隐私保护
CentOS 6.x 光盘拯救模式清空root密码
CentOS 6.x 光盘拯救模式清空root密码
396 0
|
存储 编解码 图形学
数字视频基础(下)| 学习笔记
快速学习数字视频基础(下),介绍了数字视频基础(下)系统机制, 以及在实际应用过程中如何使用。
数字视频基础(下)| 学习笔记