Object.defineProperty():修改某个对象的数据属性默认的特性

使用Object.defineProperty()修改某个对象的数据属性默认特性

1.使用Object.defineProperty()修改属性默认的特性

var person={};
Object.defineProperty(person,"name",{
    writable:false,
    value:"Nicholas"
});
console.log(person.name);//Nicholas
person.name="Greg";//writable设置为false,表示不能修改属性的值。
console.log(person.name);//Nicholas
var array1=new Array("red","yellow","blue");
var person={
    name:"Nicholas",
    age:29,
    job:"SoftWare Engineer",
    array:array1,
    sayName:function(){
        console.log(this.name);
    },
    sayArray:function(){
        console.log(this.array);
    }
}
Object.defineProperty(person,"name",{
    configurable:false,
    value:"Greg"
});
console.log(person.name);//Greg
delete person.name;//configurable设置为false,所以不能通过delete删除属性从而重新定义属性
console.log(person.name);//Greg

2.一旦把属性定义为不可配置的,就不能再把它变回可配置的。此时,再调用Object.defineProperty()方法修改除writable之外的特性(也可以修改value值),都会导致错误:

var array1=new Array("red","yellow","blue");
var person={
    name:"Nicholas",
    age:29,
    job:"SoftWare Engineer",
    array:array1,
    sayName:function(){
        console.log(this.name);
    },
    sayArray:function(){
        console.log(this.array);
    }
}
Object.defineProperty(person,"name",{
    configurable:false,
    value:"Greg"
});
Object.defineProperty(person,"name",{
    configurable:true,
    value:"Nicholas"
});//抛错

Object.defineProperty(person,"name",{
    enumerable:false
});//抛错
Object.defineProperty(person,"name",{
    writable:false,
    value:"Green"
});
console.log(person.name);//Green
person.name="Greg";
console.log(person.name);//Green

Object.defineProperty(person,"name",{
    writable:true,
    value:"Green"
});
console.log(person.name);//Green
person.name="Greg";
console.log(person.name);//Greg
Object.defineProperty(person,"name",{
    value:"GGGG"
});
console.log(person.name);//GGGG

3.使用defineProperty()方法创建一个新的属性时,如果不指定,configurable、enumerable、writable特性的默认值都是false。如果只是修改已定义的属性的特性,则无此限制。

var array1=new Array("red","yellow","blue");
var person={
    name:"Nicholas",
    age:29,
    job:"SoftWare Engineer",
    array:array1,
    sayName:function(){
        console.log(this.name);
    },
    sayArray:function(){
        console.log(this.array);
    }
}
Object.defineProperty(person,"happy",{
    value:"I am happy"
});
console.log(person.happy);//I am happy
person.happy="you are happy";
console.log(person.happy);//I am happy
for(var prop in person){
    console.log(prop);
}
/*
name
age
job
array
sayName
sayArray
 */
Object.defineProperty(person,"happy",{
    configurable:true
})//抛错,TypeError: Cannot redefine property: happy
Object.defineProperty(person,"happy",{
    value:"you are happy"
});//抛错,TypeError: Cannot redefine property: happy

猜你喜欢

转载自blog.csdn.net/yangyuqingabc/article/details/82871482