1.Object.defineProperty数组
给一个对象定义一个新的属性或者在修改一个对象现有的属性,并返回这个对象this
语法:spa
Object.defineProperty(参数1,参数2,参数3)prototype
参数1:目标对象code
参数2:要修改或者添加的属性名称对象
参数3:目标对象属性的一些特征(是一个对象)blog
参数1:继承
value:属性值get
参数2:原型
writable:对象属性值时候能够被修改 true容许 false不容许
参数3:
configurable:对象属性是否能够被删除 true容许 false不容许
参数4:
enumerable:对象属性是否能够被枚举
参数5:
get():给一个属性提供getter方法,当访问这个对象的属性值的时候触发该方法
参数6:
set():给一个属性提供setter方法,当设置属性值的时候触发该方法‘
2.value
var obj = {}; Object.defineProperty(obj,"name",{ value:"张三" }) Object.defineProperty(obj,"age",{ value:"28" }) console.log(obj)
3.writable
var obj = {}; Object.defineProperty(obj,"name",{ value:"张三", writable:false//当设置为false的时候当前对象的属性值不容许被修改 }) obj.name = "李四" console.log(obj.name)//张三 var obj = {}; Object.defineProperty(obj,"name",{ value:"张三", writable:true//当设置为true的时候当前对象的属性值容许被修改 }) obj.name = "李四" console.log(obj.name)//李四
4.configurable
var obj = {}; Object.defineProperty(obj,"name",{ value:"张三", configurable:false//当设置为false的时候对象的属性不容许被删除 }) delete obj.name; console.log(obj.name)//张三 var obj = {}; Object.defineProperty(obj,"name",{ value:"张三", configurable:true//当设置为true的时候对象的属性容许被删除 }) delete obj.name; console.log(obj.name)//undefined
5.enumerable
var obj = {name:"张三",age:"18"} Object.defineProperty(obj,"name",{ enumerable:false//当设置为false的时候对象的属性不可被枚举 }) Object.defineProperty(obj,"age",{ enumerable:true//当设置为true的时候对象的属性可被枚举 }) console.log(Object.keys(obj))
6.for in 与 Object.keys()的区别
function Person(name,age){ this.name=name; this.age=age; } Person.prototype = { sex:"男" } var man = new Person("张三",18); console.log(Object.keys(man));//["name","age"] for(var key in man){ console.log(key);//name age sex }
7.get()&&set()
var obj = {name:"张三"} Object.defineProperty(obj,"name",{ get(){ console.log("被访问了")//当被访问的时候会触发get()方法 }, set(newVal){ console.log("被设置了"+newVal)//当被设置的时候会触发set()方法 } }) obj.name;//输出:被访问了 obj.name="李四"//输出:被设置了李四