• 对象属性特性(可写,可枚举,可配置)


    
    
    对象属性的特性
    
    var obj1 = new Object();
    Object.defineProperty(obj1,"y",{
    value:1;     属性y的值,默认是undefined
    writable: true/false;   
    enumerble: true/false; 
    configurable: true/false;
    });
    
    分析:
    首先 第一行代码var obj1 = new Object(),表示创建一个空对象,相当于 
    var obj1 = { };
    {}  叫做 对象字面量
    前提是new Object()中没有传入参数,才与{}一样
    
    Object.defineProperty(obj, prop, descriptor)方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。
    在这儿,obj1 要定义属性的对象,要修改的属性名称 y , descriptor 将被定义或修改的属性描述符(三个,默认都是false)。
    
    其中 :三个描述分别是
    writeable:表示是否能修改属性的值
    enumerable:表示能否通过for-in循环返回属性,代表属性是否可枚举
    configurable:是否能通过delete删除属性从而重新定义属性,能否修改属性的三个特性,或者能否把属性修改为访问器属性,直接在对象上定义属性。
    
    
    视图找一个不存在的属性,可通过get(存储器属性)
    
    比如这里通过字面量形式创建person对象,有名字,性别属性
    
    var person = {
    username:"king",
    sex:"男“,
    get age(){   return 12; },
    set age( val ) { return ("不能设置"+val ) 
    };
    console.log(    person.username);   // king
    console.log( person.age)  ; 12  
    
    当执行到console(person.age)代码行时,person.age 试图找到不存在的 age 属性,如果想要得到age属性,在person对象里,前面写上get关键字 ,即可得到age的返回值。  所以,当想要得到age的值的时候,会自动调用写好的      get age(){}方法
    
    如果想要设置age属性的值:
    person.age = 13;
    console.log( person.age);         //输出  :不能设置13
    
    defineProperty方式创建属性并添加描述
    
    var obj={}
    Object.definedProperty(obj,"x",{
    get : function ( ) {   // 注意:通过这种方式 写get方法要通过:冒号分隔
    return 123;
    }
    });
    
    defineProperties  方式创建多个属性并添加描述
    
    通过字面量以及defineProperty的方法设置属性只能一个一个设置,其实可以用Object的property属性设置多个
    var person = {};
    Object.defineProperties(person,{
    "user" : {     //引号可写可不写 ( 属性都是字符串)
    value:"king",
    writeable:true,
    enumerable:true, 
    configuable:true    //注意:这儿没有了逗号  以上两个包括本属性,不写 默认是false;
    },   //注意 逗号
    age : {
    value:12,
    writeable:false
    } 
    });
    console.log(person.user);//king
    console.log(person['age']);  访问属性,可直接写名字,也可以加上[],当名字有破折号,就必须加上了,比如person[first-name]
    
    console.log(  Object.getOwnPropertyDescriptor(person,"user")  );
    得到person对象的user属性的描述,返回结果是:
    Object{ value:"king" , writable:true , enumerable:true , configurable:true }
    
    console.log(Object.getOwnPropertyDescriptor(person,"age"));
    得到person对象的age属性的描述,返回:
    Object{ value:12 , writeable:false , enumerable:false, configurable:false} 
    定义age属性的时候,省略了enumeralb 和configurable的属性描述,所以返回时可以看到,默认是false
    
    如果在person对象里面加上:
    person.addr = " 北京 “;
    console.log(Object.getOwnPropertyDescriptor(person,"addr"));
    返回结果三个属性描述都是true; 
  • 相关阅读:
    两个list,并集、交集、差集
    关于apt-get install
    异步进程池
    获取cpu信息
    print重定向
    使用pandas操作excel
    排列组合,取所有可能性
    list_反转,切片,删除,升序降序
    抠图
    enumerate()函数的用法
  • 原文地址:https://www.cnblogs.com/feng-xl/p/9318428.html
Copyright © 2020-2023  润新知