Object.defineProperty

这个方法是es5中新增的方法,以前没了解过,粗略的看了一下也没发现什么特别的用处。而后今天仔细的研究了一下,发现这个方法简直是本身造轮子的必要的方法。框架

先放最简单的代码示例:学习

var John = {};
Object.defineProperty(John,"age",{
  value: 23
})
console.log(John.age);  //23

我刚开始看到这种例子的时候。。个人心里也是绝望的,这es5新出的都是什么,这干吗不直接John.age = 23不就完事了么。而后我就把页面关掉了。。(不要怪我没耐心,我当时确实没上什么心。。)es5

好了,开始正式介绍这个方法。spa

defineProperty方法总共须要传入三个参数。第一个目标对象,第二个属性名称,第三个是特性descriptor。code

第一第二个不用说,第三个中间又分以下几个值:对象

value:           属性对应的值blog

writable:       若是为false,属性的值不可变ip

configurable  若是为false,该对象的全部desriptor均不可变(包括赋值)字符串

enumerable   是否能在for..in..循环中被遍历出来(感受像是是否public的感受)get

get/set         这两个是重点,也就是我对这个方法推崇,以及认为必需要学习记住的缘由。


 

下面详细阐述get、set方法:

在descriptor中不能同时设置访问器(get和set)和wriable或value,不然会错,就是说想用get和set,就不能用writable或value中的任何一个。

var John = {}
Object.defineProperty(John,"nickName",{
  set:function(newValue){
    console.log("我新的昵称是"+newValue);
  },
  get:function(){
    console.log("有人问了/看了个人昵称");
    return "二狗子";            // 这里我随意返回了一个字符串
   }
})
John.nickName = "哈哈";         // 我新的昵称是哈哈
console.log(John.nickName);     // 有人问了/看了个人昵称
                                // 二狗子

好吧其实东西很少,可是这个方法就是各类框架中的observe的底层实现。即便平时本身使用也很方便。

相关文章
相关标签/搜索