var option = {
enumerable: false,//是否可以被枚举
writable: false,//是否可以编辑
configurable: false,//是否可以配置
value: null//值,
get:function(){},//取值器(跟value不能同时存在)
set:function(value){}//设值器(跟value不能同时存在)
};
var source = {a:1};
Object.defineProperty(source,'b',{
value:2
});
console.log(source.b);//source.b是不可以修改不可以枚举的.比如Object.keys(source)是没有b的
var $temp = 0;
Object.defineProperty(source,'c',{
get:function(){return $temp;},
set:function(value){$temp = value;}
});
console.log(source.c);//source.c是不可以修改不可以枚举的.source.c获取的是(function(){return $temp;})();
source.c = '12' ;//此时执行的是(function(value){$temp = value;})('12');
我们可以在get/set方法里面添加自己的逻辑,监视数据的变化。目前框架Vue和Angular2就是这个原理。