关于属性

对象的增删改查

    // 使用字面量的形式实例化 Object 对象
    var obj1 = {
        myName: '周正国'
    };
    
    添加属性
    obj1.age = 20;
    obj1['gender'] = '男';

    修改属性的值
    obj1.age += 1;

    访问属性
    obj1['myName']
    obj1.myName

    删除属性
    delete obj1.age;

遍历对象中的属性

  1. for in 遍历
  2. Object.keys(要遍历的对象)
    构造函数.方法=function(){} 可以不用实例化对象就可以通过**构造函数.方法()**来调用,如上。

对象属性

  1. 数据属性 保存的是数据 属性名:属性值的方式
  2. 访问器属性 通常用于隐藏数据 用get,set 方法来获取或者设置属性

对象的方法

判断一个属性是否在对象中

  1. in 操作符 属性名 in 对象名 hasOwnProperty()

  2. 对象名.hasOwnProperty(属性名)

区别:2只会在对象的自有属性列表中查找,而1不仅会在自有属性列表下查找,还会沿着原型链查找。

判断某个属性是否可枚举

对象.propertyIsEnumerable()

判断一个对象是否是另一个对象的原型

原型.isPropertyOf(对象)

属性的特性

获取属性的特性

我们可以通过以下方式获取一个或多个属性的特性

  1. Object.getOwnPropertyDescriptor(对象名,要获取的属性名) 获取对象中该属性的特性
  2. Object.getOwnPropertyDescriptors(对象名) 获取对象中所有的属性的特性

如下图代码打印一下它们获取到的特性

 var student={
        studentName:"大雨",
        age:20,
        play:function(){
            console.log("打豆豆")
        }
    }
    var stu1=Object.getOwnPropertyDescriptor(student,"age");
    
    var stu2=Object.getOwnPropertyDescriptors(student);

    console.log(stu1);
    console.log(stu2);

在这里插入图片描述
可以看到得到的是一个对象,那么可以看到它的特性有四个

  • configurable 是否可配置
  • enumerable 是否可枚举
  • value 属性值
  • writable 是否可写
    当然它们默认都是 true 。我们也可以去控制这些特性。

控制属性的特性

  1. Object.defineProperty(对象名,属性,{修改特性的值 }) -----> 控制一个属性的值
  2. Object.defineProperties(对象名,{属性名:{修改特性的值},属性名:{修改特性的值}}) -----> 控制一个属性的值
  Object.defineProperty(student,"age",{
        value:18,
        configurable:false,
        enumerable:false,
        writable:false
    })
        Object.defineProperties(student,{
            gender:{
            value:"女",
            configurable:true,
            enumerable:false,
            writable:false
            },
            num:{
            value:01,
            configurable:false,
            enumerable:false,
            writable:true
            }
        })
        console.log(Object.getOwnPropertyDescriptor(student,"age"))
        console.log(Object.getOwnPropertyDescriptors(student))

在这里插入图片描述
所以我们也可以利用这种方式添加属性或者修改属性值,同时设置属性的特性

禁止对象扩展

查询对象是否可被扩展 Object.isExtensible(要查询的对象名) 默认都为true。
禁止对象扩展 Object.preventExtensions(要禁止的对象名)
禁止对象扩展的特性:不可向对象中添加新的属性

对象封印

判断对象是否被封印 Object.isSealed(要查询的对象名)
封印对象 Object.seal(要封印的对象名)
对象被封印后的特性:不可删除属性,不可添加新属性,可以修改属性值。
所有被封印对象的属性的特性都被设置了:configurable: false

冻结对象

判断对象是否被冻结 Object.isFrozen(要查询的对象名)
封印对象 Object.freeze(要封印的对象名)
对象被封印后的特性:不可删除属性,不可添加新属性,不可修改属性值。

猜你喜欢

转载自blog.csdn.net/qq_43697072/article/details/84799016