<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
//对象的属性类型
//对象分为数据属性和访问器属性
//1、数据属性:[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]]
// Configurable是否可以通过delete删除属性
// Enumerable可否for-in
// Writable能否修改属性值
// Value读取这个属性的数据值
var person = {
name: "宝清老窖",
}
//创建一个person对象,该对象创建了一个名为name的属性,值为“宝清老窖”。
//也就是说,[[Value]]特性将被设置为“宝清老窖”
//要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()
//改方法包含三个参数,1、属相所在的对象;2、属性的名字;3一个描述符;
//其中描述符(descriptor)对象的属性必须是:configurable、enumerable、writable、value
var person = {}; //writable
Object.defineProperty(person , "name" , {
writable: false,
value: "宝清老窖"
});
alert(person.name); //宝清老窖
person.name = "金宝清";
alert(person.name); //宝清老窖
var person2 = {}; //Configurable
Object.defineProperty(person2 , "name" , {
configurable: false,
value: "宝清老窖"
});
alert(person2.name);
delete person2.name;
alert(person2.name);
//当configurable为false的时候,不能用delete删除
//如果用delete删除,在非严格模式下什么都不会发生,在严格模式下会报错
//一旦把configurable变为false就不能再变回true了,会报错
var person3 = {};
Object.defineProperty(person3 , "name" , {
configurable: false,
value: "宝清老窖"
});
Object.defineProperty(person3 , "name" , {
configurable: true, //会报错
value: "宝清老窖"
});
//
</script>
</body>
</html>
提取出js部分
//对象的属性类型
//对象分为数据属性和访问器属性
//1、数据属性:[[Configurable]]、[[Enumerable]]、[[Writable]]、[[Value]]
// Configurable是否可以通过delete删除属性
// Enumerable可否for-in
// Writable能否修改属性值
// Value读取这个属性的数据值
var person = {
name: "宝清老窖",
}
//创建一个person对象,该对象创建了一个名为name的属性,值为“宝清老窖”。
//也就是说,[[Value]]特性将被设置为“宝清老窖”
//要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()
//改方法包含三个参数,1、属相所在的对象;2、属性的名字;3一个描述符;
//其中描述符(descriptor)对象的属性必须是:configurable、enumerable、writable、value
var person = {}; //writable
Object.defineProperty(person , "name" , {
writable: false,
value: "宝清老窖"
});
alert(person.name); //宝清老窖
person.name = "金宝清";
alert(person.name); //宝清老窖
var person2 = {}; //Configurable
Object.defineProperty(person2 , "name" , {
configurable: false,
value: "宝清老窖"
});
alert(person2.name);
delete person2.name;
alert(person2.name);
//当configurable为false的时候,不能用delete删除
//如果用delete删除,在非严格模式下什么都不会发生,在严格模式下会报错
//一旦把configurable变为false就不能再变回true了,会报错
var person3 = {};
Object.defineProperty(person3 , "name" , {
configurable: false,
value: "宝清老窖"
});
Object.defineProperty(person3 , "name" , {
configurable: true, //会报错
value: "宝清老窖"
});
//