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
目录
相关文章
|
2月前
|
JavaScript
JS数组增删方法的原理,使用原型定义
JS数组增删方法的原理,使用原型定义
|
2月前
|
JavaScript 前端开发 开发者
【专栏】JavaScript 中的 prototype 和__proto__是关乎对象继承和属性查找的关键概念
【4月更文挑战第29天】JavaScript 中的 prototype 和__proto__是关乎对象继承和属性查找的关键概念。prototype 是函数属性,用于实现对象继承,方法和属性定义在其上可被所有实例共享。__proto__是对象属性,实现属性查找机制,当对象自身找不到属性时,会沿原型链向上查找。两者关系:__proto__指向构造函数的 prototype,构成对象与原型的桥梁。虽然 prototype 可直接访问,但__proto__由引擎内部维护,不可见。理解两者区别有助于深入学习 JavaScript。
|
2月前
|
JavaScript
jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
31 2
|
2月前
|
Java
Java常用封装Base对象
Java常用封装Base对象
21 0
|
2月前
|
存储 C++
[C++ 从入门到精通] 7.类基础、成员函数、对象拷贝
[C++ 从入门到精通] 7.类基础、成员函数、对象拷贝
32 0
|
11月前
|
JavaScript 前端开发
js中的Array对象属性和方法整理(二)
js中的Array对象属性和方法整理
67 0
|
11月前
|
JavaScript 前端开发 程序员
js中的Array对象属性和方法整理(一)
js中的Array对象属性和方法整理
57 0
|
安全 编译器 数据安全/隐私保护
对象的动态创建和销毁以及对象的复制,赋值
🐰对象的动态创建和销毁 🐰对象的复制 🐰对象的赋值
|
JSON Java 数据库
代码重构实战-将值对象改为引用对象(Change Value to Reference)
一个数据结构中可能包含多个记录,而这些记录都关联到同一个逻辑数据结构。例如,我可能会读取一系列订单数据,其中有多条订单属于同一个顾客。遇到这样的共享关系,既能将顾客信息作为值对象看待,也能将其视为引用对象
87 0
|
JavaScript
js基础笔记学习69-枚举对象中得属性
js基础笔记学习69-枚举对象中得属性
60 0
js基础笔记学习69-枚举对象中得属性