博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象属性特性(可写,可枚举,可配置)
阅读量:4593 次
发布时间:2019-06-09

本文共 2159 字,大约阅读时间需要 7 分钟。

对象属性的特性var obj1 = new Object();Object.defineProperty(obj1,"y",{value:1;     属性y的值,默认是undefinedwritable: 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);   // kingconsole.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);         //输出  :不能设置13defineProperty方式创建属性并添加描述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);//kingconsole.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;

 

转载于:https://www.cnblogs.com/feng-xl/p/9318428.html

你可能感兴趣的文章
未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序...
查看>>
【转载】《Flexpaper二次开发入门教程》(十) Flexpaper简单使用-第一个Flexpaper例子(4.1节) ......
查看>>
如何深入思考
查看>>
用逗号隔开简单数据保存为csv
查看>>
POJ-1860 Currency Exchange SPFA判断环
查看>>
xampp+eclipse环境下使用phpunit
查看>>
python的类和对象(1)
查看>>
一个动态内存管理模块的实现
查看>>
url 编码(percentcode 百分号编码)
查看>>
队列课下作业
查看>>
【一本通】欧拉回路
查看>>
【LeetCode】290. Word Pattern 解题小结
查看>>
DataGrid CollectionViewSource Refresh性能问题
查看>>
数据库字符集(AL32UTF8)和客户端字符集(2%)是不同的
查看>>
关于在CMD中数据库操作中文乱码问题
查看>>
机器学习之路: python 决策树分类DecisionTreeClassifier 预测泰坦尼克号乘客是否幸存...
查看>>
R语言做正态性检验
查看>>
linux用户组管理
查看>>
Console-算法[for]-输出等腰三角形
查看>>
随机数产生方法小知识点
查看>>