MVVM框架

325 阅读1分钟

原理:

一:双向和绑定 认识

1: 双向指的是 view和data

2: 绑定: 传统是通过绑定事件进行赋值, (MVVM自动化处理)

二:原理

1: 正向 Object.defineProperty 监听data变化会有一个回掉函数,Object.defineProperty 会自动调用这个函数

2:反向 通过input事件

三:Object.defineProperty

// 使用 __proto__
var obj = {};
var descriptor = Object.create(null); // 没有继承的属性
// 默认没有 enumerable,没有 configurable,没有 writable
descriptor.value = 'static';
Object.defineProperty(obj, 'key', descriptor);

// 显式
Object.defineProperty(obj, "key", {
  enumerable: false,
  configurable: false,
  writable: false,
  value: "static"
});

// 循环使用同一对象
function withValue(value) {
  var d = withValue.d || (
    withValue.d = {
      enumerable: false,
      writable: false,
      configurable: false,
      value: null
    }
  );
  d.value = value;
  return d;
}
// ... 并且 ...
Object.defineProperty(obj, "key", withValue("static"));

// 如果 freeze 可用, 防止代码添加或删除对象原型的属性
// (value, get, set, enumerable, writable, configurable)
(Object.freeze||Object)(Object.prototype);