zoukankan      html  css  js  c++  java
  • 对象方法统计

    1、object.is

    比较俩个值是不是对等。

    Object.is("he","he")  //true
    
    Object.is({},{})    //fasle

    2、object.assign

    方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)

    var obj = {a:1,b:2};
     var obj2 = {c:3,d:4};
    
     let js = Object.assign(obj,obj2);  //{a:1,b:2,c:3,d:4}
    
    
    let js = {...obj,...obj2} == let js = Object.assign(obj,obj2);

    参数不能为null或者是undefined 

    Object.assign(null)   //报错
    
    Object.assign(undefined)   //报错

    当我们使用assign去合并对象的时候。原对象也会发生改变

     var obj = {a:1,b:2};
     var obj2 = {c:3,d:4};
    
     let js = Object.assign(obj,obj2);
    
        console.log(js);    //{a: 1, b: 2, c: 3, d: 4}
    
        console.log(obj);   //{a: 1, b: 2, c: 3, d: 4}

    Object.assign注意一下几点

    1、方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

    2、对于这种嵌套的对象,一旦遇到同名属性,Object.assign的处理方法是替换,而不是添加。

    3、Object.assign可以用来处理数组,但是会把数组视为对象。

    常见用法

    (1)为对象添加属性

    class Point {
      constructor(x, y) {
        Object.assign(this, {x, y});
      }
    }

    上面方法通过Object.assign方法,将x属性和y属性添加到Point类的对象实例。

    (2)克隆对象var obj = {a:1,b:2};

    
    
      var obj = {a:1,b:2};
        var obj2 = {c:3,d:4};
      
      
       let cloe = Object.assign(
            Object.create(Object.getPrototypeOf(obj)),
            obj
        )

     这里说一下Object.create 他是创建一个新对象,使用现有的对象的原型,创建新对象。

    Object.getPrototypeOf下面会说到(放回当前对象的原型值)

    这样就可以把一个对象进行拷贝。但是这还拷贝还不完全,下面会说到一个完全一点的方法。

    2、object.getPrototypeOf

    方法返回指定对象的原型内部[[Prototype]]属性的值)

    function ps(a,b){
       this.a = a;
    }
    var de = new ps(3,6)
    console.log(Object.getPrototypeOf(de));
    //{constructor: ƒ}

    在构造模式下他获得是构造函数

    var d = {a:1}
    console.log(Object.getPrototypeOf(d))
    //{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}

    在字面量情况下  返回的就是  原型

    object.getPrototypeOf == __propo__ 

     3、Object.defineProperties ()

    方法直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

    var obj = {};
    Object.defineProperties(obj, {
      'property1': {
        value: true,
        writable: true
      },
      'property2': {
        value: 'Hello',
        writable: false
      }
    });
    
    //{property1: true, property2: "Hello"}

    上面的内容是把对象obj进行了修改。

     4、Object.getOwnPropertyDescriptors()

    方法,返回指定对象所有自身属性(非继承属性)的描述对象。

    var obj2 = {
        a:1,
        he:function(){
            return thia.a++
        },
    }
    
    
    console.log(Object.getOwnPropertyDescriptors(obj2));
    
    
    //{a: {…}, he: {…}}

    次方法可以解决Object.assign无法拷贝get和set的方法

    let obj = {
        set foo(value){
           return value
         }
    }
    
    let obj2 = {}
    
    Object.defineProperties(obj2,Object.getOwnPropertyDescriptors(obj));
    
    console.log(Object.getOwnPropertyDescriptors(obj2));
    
    //{foo: {…}}
        {foo: {…}}
    foo:
    configurable: true
    enumerable: true
    get: undefined
    set: ƒ foo(value)
    __proto__: Object
    __proto__: Object

    上面的内容是拷贝的过程。过程中 Object.defineProperties 

    修改了obj2的属性方法。属性方法是通过 Object.getOwnPropertyDescriptors 来进行获取,这个方法可以获得对应的属性方法,包括get,和set

    这样就实现了正确的拷贝

    5、Object.keys(),Object.values(),Object.entries()

    Object.keys配套的Object.valuesObject.entries,作为遍历一个对象的补充手段,供for...of循环使用。

    var obj = {a:1,b:2,name:"lly",age:20}
    
    for(let i of keys(obj)){
        console.log(i);
    }
    //  a b name age
    
    for(let z of values(obj)){
        console.log(z);
    }
    
    //  1 2 lly 20
  • 相关阅读:
    vue.js实战——.native修饰符
    vue.js实战——props数据验证(自定义构造器检测)
    vue.js实战——props单向数据流
    vue组件之嵌套
    vue非父子组件之间的通信——发布订阅模式,总线机制
    脚本加载优化方法
    文字溢出时,实现在末尾显示三个点省略效果
    1-stm32 gpio库函数
    2-C语言 排序算法
    电子工程师扫盲
  • 原文地址:https://www.cnblogs.com/chenyudi/p/12963774.html
Copyright © 2011-2022 走看看