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
jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
jQuery 的属性拷贝(extend)的实现原理是什么,如何实现深拷贝?
20 2
|
5月前
|
存储 C++
[C++ 从入门到精通] 7.类基础、成员函数、对象拷贝
[C++ 从入门到精通] 7.类基础、成员函数、对象拷贝
26 0
|
9月前
|
JavaScript 前端开发
js中的Array对象属性和方法整理(二)
js中的Array对象属性和方法整理
58 0
|
9月前
|
JavaScript 前端开发 程序员
js中的Array对象属性和方法整理(一)
js中的Array对象属性和方法整理
54 0
|
安全 编译器 数据安全/隐私保护
对象的动态创建和销毁以及对象的复制,赋值
🐰对象的动态创建和销毁 🐰对象的复制 🐰对象的赋值
|
前端开发
前端学习案例1-对象的拷贝方式
前端学习案例1-对象的拷贝方式
39 0
前端学习案例1-对象的拷贝方式
|
前端开发
前端学习案例1-拷贝继承
前端学习案例1-拷贝继承
39 0
前端学习案例1-拷贝继承
|
前端开发
前端学习案例2-拷贝继承2
前端学习案例2-拷贝继承2
30 0
前端学习案例2-拷贝继承2
|
移动开发 JavaScript 前端开发
前端温习(二): Javascriput 核心对象 Document 对象(二)
当浏览器载入 HTML 文档, 它就会成为 Document 对象。 Document 对象是 HTML 文档的根节点。 Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
57 0
|
移动开发 前端开发 JavaScript
前端温习(二): Javascriput 核心对象 Document 对象(一)
当浏览器载入 HTML 文档, 它就会成为 Document 对象。 Document 对象是 HTML 文档的根节点。 Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
73 0