(function () { var o = {}; Object.defineProperties(o,{ "a": { value:1, writable:true,//可写 configurable:false//不可配置 //enumerable 默认为 false 不可枚举 }, "b":{ get :function(){ return this.a; }, configurable:false } }); console.log(o.a); //1 o.a = 2; //修改值成功,writable 为 true console.log(o.a); //2 Object.defineProperty(o,"a",{value:3});//同样为修改值成功 console.log(o.a); //3 //将其属性 b 的属性描述符从存取描述符重新配置为数据描述符 Object.defineProperty(o,"b",{value:3});//抛出异常,因为 configurable 为 false })();
浅谈JS对象添加getter与setter的5种方法(6)
2.通过上面的学习,我们都知道传递属性描述符参数时,是定义一个匿名的对象,里面包含属性描述符内容,若每定义一次便要创建一个匿名对象传入,将会造成内存浪费。故优化如下:
(function () { var obj = {}; //回收同一对象,即减少内存浪费 function withValue(value){ var d = withValue.d ||( withValue.d = { enumerable : false, configurable : false, writable : false, value :null } ); d.value = value; return d; } Object.defineProperty(obj,"key",withValue("static")) })();
这篇文章就介绍到这,更多的可以查看加黑区网络之前发布的文章。