object.defineproperty&&object.keys

/*
Object.defineProperty:
给一个对象添加或者修改属性 返回一个对象


参数1:目标对象
参数2:需要修改或者添加的属性
参数3:当前属性的一些特征 对象
value: 设置属性值
writable: 设置当前属性是否允许被修改
configurable:设置当前属性是否可以删除
enumerable:设置当前属性是否可被枚举
getter---get() 当获取属性值的时候触发的函数
setter---set() 当设置属性的时候触发的函数

如何模拟ES6的const?

 

//value
var obj = {};
Object.defineProperty(obj,"name",{
value:"宋磊"
})

console.log(obj.name)


//writeable
var obj = {};
Object.defineProperty(obj,"name",{
value:"宋磊",
writable:false
})
obj.name="王多";
console.log(obj.name)


//configurable
var obj = {age:19};
Object.defineProperty(obj,"name",{
value:"宋磊",
configurable:false
})
delete obj.age;
delete obj.name;
console.log(obj)

 

enumerable:
var obj = {name:"宋磊",age:20};
Object.defineProperty(obj,"sex",{
value:"男",
enumerable:true
})

 

for(var key in obj){
console.log(key);
}


var obj = {name:"宋磊",age:20};
Object.defineProperty(obj,"sex",{
value:"男",
enumerable:true
})

console.log(Object.keys(obj))

 

 


Object.keys:把当前对象的属性枚举出来 返回值是一个数组
for in 与 Object.keys 的区别
前者可以把原型对象身上的属性枚举出来
后者不能把原型对象身上的属性枚举出来


function Fn(){}
Fn.prototype.type="人类";

var obj = new Fn();
obj.name = "宋磊";
obj.age = 20;
obj.sex = "男";


for(var key in obj){
console.log(key)
}

console.log(Object.keys(obj))
*/


//当使用get set方法的时候不允许使用value和writeable不然会报错

/*
数据劫持
当获取或设置的时候会劫持到新的值
*/
var obj = {name:"宋磊"};
Object.defineProperty(obj,"name",{
configurable:true,
enumerable:true,
get:function(){
console.log("获取了")
},
set:function(newStr){
console.log("设置了新值"+newStr)
}

})


obj.name;

obj.name = "王多";

 

posted @ 2018-10-07 17:56  carolavie  阅读(113)  评论(0编辑  收藏  举报