defineProperty高级应用

defineProperty高级应用

by kixi

CSS

/*
清晰网
kixi.com.cn
从javascript开始
*/

JavaScript

//有点复杂,比较少用到defineProperty
try {
     var o = {};
     Object.defineProperty(o, "attr", {
         value: "这是利用defindProperty添加的新属性",
         writable: false,
         enumerable: true,
         configurable: true
     });

    //匿名函数,注意变量的作用域
     (function () {
         var name = "清晰网kixi.com.cn";
         //读写器
         Object.defineProperty(o, "name", {
             get: function () {
                 return name;
             },
             set: function (value) {
                 name = value + "!";
             }
         });
     })();

     alert(o.attr)
     // 这是利用defindProperty添加的新属性

     alert(o.name); // 清晰网

     o.name = "ruby louvre";
     alert(o.name); // ruby louvre

     alert(Object.keys(o)) //attr
     try {
         o.attr = "试图重写该属性";
     } catch (ee) {
         alert("与writable: false冲突");
     }
     Object.defineProperty(o, "attr", {
         writable: true,
         configurable: false
     });

     o.attr = "再试尝试重写该属性";
     alert(o.attr);

     alert(delete o.attr); //false 与writable: false冲突


 } catch (e) {
     alert("你的游览器不支持Object.defineProperty ")
 }