• 对象的属性和方法


    对象的属性和方法

    js中,所有的数据类型都是继承自Object(对象),所以都有toString()方法

    1.Object.assign()和...arg的区别

    • Object.assign() 将一个或者多个对象中可枚举属性复制到第一个参数对象数中,
    • 如果后面的对象属性与前面的对象属性相同时,则会覆盖前面的对象属性
    • 原对象中增加复制的属性,引用地址不改变
    var o1={a:1,b:2,c:3};
    var o2={d:4,e:5,f:6};
    var o3={a:7,e:8,c:9};
    var o0=o={h:10};
    Object.assign(o,o1,o2,o3);    //可以很多个参数
    console.log(o===o0);      //true
    
    • ...arg 将一个或者多个对象中可枚举属性复制到第一个参数对象数中,
    • 如果后面的对象属性与前面的对象属性相同时,则会覆盖前面的对象属性
    • 原对象中属性被复制的属性覆盖,引用地址发生改变
    var o5=o4={h:10};
    o4={...o1,...o2,...o3}; // 将o1,o2,o3的所有属性解构产生新对象赋值给了o4
    console.log(o4===o5);   //false   引用地址发生了改变
    console.log(o5,o4)
    

    2.Object.defineProperty() 增加对象的一个属性

    • 参数: 3个 操作对象,属性名,该属性的描述对象
    var obj = {};
    Object.defineProperty(obj, "a", {
    configurable: true,//true 可以删除   false 不能删除       默认是false
    enumerable: true,// true可以枚举(可以遍历到 for  in)   false 不可枚举      默认是false
    writable: true,//true可以写(能修改)  false只读(不能修改)                   默认是false
    value: 10,//该属性的值                                                      
    });
    
    Object.defineProperty(obj, "b", {
        configurable: true,
        enumerable: true,
        set: function (_v) {},   //这两个属性和writeable value冲突,不能写到一起
        get: function () {},
      });
    
    Object.defineProperties() 增加对象的多个属性
    • 参数: 2个 操作对象 该属性的描述对象(对象中有若干属性)
    Object.defineProperties(obj,{
        a:{
            enumerable:false,
            writable:true,
            configurable:true,
            value:20
        },
        b:{
            writable:true,
            configurable:true,
            value:function(){
    
            }
        },
        c:{
            configurable:true,
            value:100
        }
    })
    
    console.log(obj); 
    

    3.Object.freeze(obj) 冻结数组,函数和对象的属性,但是不会冻结其引用地址

    obj.a=10;
    obj.b=20;
    Object.freeze(obj);
    delete obj.a;
    obj.a=100;
    obj.c=10;
    console.log(obj)   //冻结后   不能进行属性的删除,修改,增加
    obj={a:100,b:0}   //引用地址发生改变后,冻结不生效
    console.log(obj);
    

    4.Object.getOwnPropertyNames(obj) 获取对象的所有对象属性名,返回值数组

    5.Object.getOwnPropertyDescriptor(obj,属性名) 获取对象属性的描述对象

     var obj={a:1,b:2,c:3};
     console.log(Object.getOwnPropertyNames(obj));    //["a", "b", "c"]    返回对象
    
     console.log( Object.getOwnPropertyDescriptor(obj,"a"));   //返回该属性的描述对象   两个参数   一个是操作对象,一个是属性名
    

    上面的这两种方法可以遍历不可枚举属性

    6.Object.is(a,b) 判断a,b是否相等,相当于===

    • 二者不同之处: Object.is(NaN,NaN) 结果是true ===是false

    7.Object.isExtensible(obj) 判断是否是可扩展(不可以增加新属性)

    8.Object.isFrozen(obj) 判断是否被冻结

    class Ball extends Box{
        constructor(){
            super();
        }
        run(){
    
        }
    }
    

    9.obj.hasOwnProperty("e") 判断是否有这个属性 动态方法 相当于 in

    • 判断是否有某个属性 原型上的属性不算
    • in 原型上的属性也算

    10.Box.isPrototypeOf(Ball) Ball的父类是否有Box类

    console.dir(document.documentElement);
    var div=document.createElement("div");
    console.log(HTMLElement.isPrototypeOf(div.constructor));     //判断是否是标签
    

    11.obj.propertyIsEnumerable("b") 属性是否可以枚举

    12. b instanceof Box b是否是Box的子类(继承属性) 经常用来判断类型

    console.log(b instanceof Ball);
    console.log(b.constructor===Box);   
    console.log(typeof b==="object")
    
  • 相关阅读:
    scoket --- 练习
    网络编程---scoket使用,七层协议,三次挥手建连接,四次挥手断连接
    类的总复习
    面向对象 --- 类的绑定方法,面向对象高阶
    组合,访问限制机制,抽象类 --- 练习
    面向对象 --- 类的组合,封装,多态
    类的继承 --- 练习
    面向对象 --- 类的继承
    基于面向对象设计一个游戏
    请求头类型content-type
  • 原文地址:https://www.cnblogs.com/94-Lucky/p/13493035.html
Copyright © 2020-2023  润新知