<!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: "宝清老窖" }); //