.
获得该对象下的指定属性的所有属性标签:object.getOwnPropertyDescriptor(对象,属性名)
object.getOwnPropertyDescriptor({pro:true},'pro')//value、writable、enumerable、configurable
object.getOwnPropertyDescriptor({pro:true},'a')//undefined
var person ={};//创建一个新的对象
Object.definedProperty(person,'name',{属性标签})//添加person对象的属性name,并设置属性标签
属性标签={value:'bs',writable:false,enumerable:true,configurable:false}
Object.defineProperty(person,'type',{configurable:true,writable:true,enumerable:false,value:'object'})
Object.keys(person);返回person对象上所有的属性,//name,因为type不可被枚举、遍历
Object.defineProperties(person,{属性1:{相应属性标签},属性2:{相应属性标签}})//设置person对象多个属性。
属性标签
属性标签
hhh
Object.getOwProertyDescriptor(obj,property_name);<br>
value: 属性值
writable: 该属性是否可写,可改变<br>
enumerable:该属性是否可被枚举,就是可在for in中出现<br>
configurable: 该属性的标签是否可改变,是否可用delete将该属性删除。
用defineProperty定义属性时,默认configurable为true,如果设置为false后,该属性不管是什么方式都无法更改。
可以
//会发现上面是不能修改了configurable所以一定要进行判断,在这里还有一个configurable和writable不同值情况下的操作情况,有些情况可以被操作,有些不能
undefined
//这集讲解属性的标签
undefined
//一般都有writable表示是否可以写入,enumerable表示是否可以被forin枚举到,configurable表示是否可以删除掉
undefined
//下面我们介绍一种可以进行访问的函数,这个函数可以查看当前属性下的所有的标签
undefined
var person{};
VM16631:1 Uncaught SyntaxError: Unexpected token '{'
Object.defineProperty(person,'name',{
configurable : false;
})
VM16689:2 Uncaught SyntaxError: Unexpected token ';'
Object.defineProperty(person,'name',{
configurable : false,
writable: true,
enumerable:false,
value:"Yangdainyi",
})
VM16747:1 Uncaught ReferenceError: person is not defined
at <anonymous>:1:23
(anonymous) @ VM16747:1
Object.defineProperty(person,'type',{
value : "OBject",
writable:true,
enumerable:true,
configuarable:false,
})
VM16824:1 Uncaught ReferenceError: person is not defined
at <anonymous>:1:23
(anonymous) @ VM16824:1
//上面在person下创建了两个属性,我们可以用keys去访问person下所有的属性,会发现只有type,是因为name2的enumerable是false
undefined
Object.keys(person)
VM16922:1 Uncaught ReferenceError: person is not defined
at <anonymous>:1:13
(anonymous) @ VM16922:1
Object.defineProperties(person,{
salary:{value:50000,enumerable:true,writable:true},
luck:{
get:function(){
return Math.random()>0.5? 'good':'bad';
},
promote:{
set:function(level){
this.salary *= 1+level*0.1;//给自己加工资,这个下面是会更改当下的salary的
}
} ,
}
})
VM16972:1 Uncaught ReferenceError: person is not defined
at <anonymous>:1:25
(anonymous) @ VM16972:1
//上面在person下创建了两个属性,我们可以用keys去访问person下所有的属性,会发现只有type,是因为name2的enumerable是false
Object.getOwnPropertyDescriptor({pro:true},'pro')
value:属性值
writable:该属性是否可写,可修改true/false
enumerable:该属性是否可被枚举,在for in中出现(是否可遍历true/false)
configurable:该属性的标签是否可改变,是否可用delete将该属性删除true/false
复习新得很开心嘿嘿
属性标签修改
总结:
修改属性的值
1:writable为true
2:writable为false,但是configurable为true,可以通过defineProperty设置writable为true,所以意义不大
delete属性:configurable为true
get/set方法:configurable为true
修改属性标签:configurable为true
对象的属性
writable 不可写(修改属性值)
configurable: false 不可以被删除
enumerable: false 不可枚举(查找对象的key的时候查不到)
[重要] Object的各个属性标签的作用(注意左下角)
如果 enumerable 设置为 false
那么 for in 和 Object.keys 都无法遍历此属性
对象属性删除不成功 是因为configurable为false
属性标签的设置
属性标签
value:默认值
writable:true / false 属性是否可修改
enumerable:true / false 属性是否可枚举
configurable:true / false 以上属性标签是否可修改
1)在使用Object.defineProperty、Object.defineProperties 或 Object.create 函数的情况下添加数据属性,writable、enumerable和configurable默认值为false。
2)使用对象直接量创建的属性,writable、enumerable和configurable特性默认为true。
属性标签的限制
更复杂得使用Object.definePropertie:
用到的方法:
用到的方法:
当config与writable都为false时,只能将wriable改为true,其他属性不可更改。
属性标签 图标
Object.defineProperties(person,{
title:{},
corp:{}
})
Object.getOwenPropertyDescriptor({pro:true},'pro')
获取属性标签。
Object.keys(person) 获取key
这个章节对的内容很有用
属性标签的修改