1、ES中的对象是完全动态的,这意味着,在程序执行的时候我们可以任意的添加,修改或删除对象的属性。
var stu = { ID: 1 }; //添加新属性 stu.Name = 'ck'; console.log(stu); //{ID:1,Name:ck} alert(stu.ID+stu.Name);
有些属性不能被修改——(只读属性、已删除属性或不可配置的属性)。
2、ES5规范规定,静态对象不能扩展新的属性,并且它的属性页不能删除或者修改。他们是所谓的冻结对象,可以通过应用Object.freeze(o)方法得到。
var stu = { ID: 1 }; //冻结对象 Object.freeze(stu); console.log(Object.isFrozen(stu)); //true //不能修改 stu.ID = 3; //不能扩展 stu.Name = 'ck'; //不能删除 delete stu.ID;
3、在ES5规范里,也使用Object.preventExtensions(o)方法防止扩展,或者使用Object.defineProperty(o)方法来定义属性:
var stu = { ID: 1 }; Object.defineProperty(stu, "Name", { value: "ck", writable: false, //只读 configurable: false //不可配置 }); //不能修改 stu.Name = 'jxl'; alert(stu.Name); // ck //不能删除 delete stu.Name; //false //防治扩展 Object.preventExtensions(stu); console.log(Object.isExtensible(stu)); // false //不能添加新属性 stu.Age = 28; console.log(stu); //{ID:1,Name='ck'}