目前我们的代码结构:
God(这是一个母对象)专门负责:1、加工传入的业务对象。2、把重要属性让业务对象可访问。3、把一些属性密封起来
业务子对象,约定通用的data()
方法和methods
子对象。
可以有n个业务子对象。
这样做的目的?让我们的业务对象具备较强的可编程性、可扩展性、规范性。
前面我们完成了子对象中通过this.$global
来访问母对象God
中的属性,但是这其中还有一个问题,就是$global
可以在子对象中被修改:
methods:{
show(){
this.$global.version = '2.0';
alert(this.$global.version);
}
}
比如这样被修改了。
现在我们来解决这个问题
修改母对象God
的init()
方法:
init(){
// 把God对象的这2个属性的enumerable设置为false
// Object.defineProperty(this,'init',{enumerable:false});
// Object.defineProperty(this,'extends',{enumerable:false});
// 批量设置方法
Object.defineProperties(this,{
'init':{enumerable:false}, // 设置属性不可枚举
'extends':{enumerable:false}, // 设置属性不可枚举
});
var keys = Object.keys(this); // 列举出this当前是所有属性
this.$global = {}; // 创建一个新对象 叫做 $global
keys.forEach((key)=>{
this.$global[key] = this[key];
});
Object.freeze(this.$global); // 冻结对象
}