什么是MVVC?
MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版
模型(Model) - 表示应用程序核心(数据)
视图(View) - 用户界面
视图模型(ViewModel)- 连接View和Model,当数据发生改变,自动更新View。
MVVM框架最常见的特性之一就是数据的双向绑定
简单案例
对象的Object.defineProperty(obj,prop,descriptor)方法
obj:要定义属性的对象。
prop:要定义或修改的属性的名称或 Symbol 。
descriptor:要定义或修改的属性描述符。
let model = {name: "张三",age: 12}Object.defineProperty(model, "name", {value: "李四",writable: true, //false不能重写,true能够重写enumerable: true, //表示是否可以被枚举(枚举就是可以被遍历),false不能,true可以configurable: true //configurable false不可以被删除,可以被删除 });// model.name = "kkakak";// console.log(model.name);// for (const key in model) {// console.log(key);// }delete model.name;console.log(model);
对象的Object.defineProperty(obj,prop,descriptor)方法的作用,对对象的某个属性进行劫持来实现数据的双向绑定
let model = {name: "张三",age: 23,sex: "男",address: "北京"}let _model = {...model}//对model进行浅拷贝for (let key in model) {if (key !== 'sex') {//对sex属性不进行劫持Object.defineProperty(model, key, {set(val) {//set方法是改变属性值的时候会自动触发这个方法
//由于改变属性值会触发set方法,所以这里在_model上面对属性值进行修改,才不会导致死循环_model[key] = val},
//get()方法当获取值的时候会自动触发这个方法get() {return _model[key]}})}}model.address = "成都"console.log(model.address);console.log(model);
es5的劫持对象
let model = {name: "张三",age: 13,loves: "赵敏",money: 12000}
//对整个对象进行劫持let _model = new Proxy(model, {
//target 是目标对象,key是属性名称,value是属性值set(target, key, value) {console.log("设置属性...");target[key] = value;},
//target是目标对象,key是属性名称get(target, key) {console.log("获取值...");return target[key];}})_model.name = "张无忌"console.log(_model);console.log(_model.name + "喜欢" + _model.loves);