zoukankan      html  css  js  c++  java
  • es6中的Object.assign

    在写一些插件的时候,我们会经常遇到所传参数需要合并默认参数,并覆盖相同参数的情况,在jQuery中我们可以使用$.extend(),在原生中要想使用得自己封装,

    但自从es6出现了Object.assign,我们就方便多了

    var obj = {
                name:"a",
                age: 28,
                gender: "male"
            };
    
            var defaultObj = {
                name: "佚名",
                age: 18
            }
            var res = Object.assign(defaultObj , obj);    
         console.log(res);  //{name: "a", age: 28, gender: "male"}

    可以看到上面的代码已经实现了我们的需求,但注意这里有一些坑,我们来看下面的代码

    var obj = {
                name:"a",
                age: 28,
                gender: "male"
            };
    
            var defaultObj = {
                name: "佚名",
                age: 18
            }
            var res = Object.assign(defaultObj , obj);    
          console.log(res);  //{name: "a", age: 28, gender: "male"}
             console.log(obj);    //{name: "a", age: 28, gender: "male"}
             console.log(defaultObj);   //{name: "a", age: 28, gender: "male"}

    可以看到我们同时也污染了defaultObj的值,那么怎么解决这样尴尬的局面呢,解决方案其实也很简单,代码如下

    var obj = {
                name:"a",
                age: 28,
                gender: "male"
            };
    
            var defaultObj = {
                name: "佚名",
                age: 18
            }
            var res = Object.assign({},defaultObj , obj);    
          console.log(res);  //{name: "a", age: 28, gender: "male"}
             console.log(obj);    //{name: "a", age: 28, gender: "male"}
             console.log(defaultObj);   //{name: "佚名", age: 18}
  • 相关阅读:
    [LeetCode] Convert Sorted Array to Binary Search Tree
    [LeetCode] Diameter of Binary Tree
    [LeetCode] Student Attendance Record I
    [LeetCode] Reverse String II
    [LeetCode] Missing Number
    [LeetCode] Intersection of Two Arrays II
    [LeetCode] Base 7
    Ubuntu中firefox设置成中文
    Linux中的查找命令find
    Ubuntu14.04安装配置Chrome浏览器
  • 原文地址:https://www.cnblogs.com/chenzhiyu/p/8695408.html
Copyright © 2011-2022 走看看