mobx模拟

var globalID = 0;
function observable(obj) {
var oID = ++globalID;
return new Proxy(obj, {
get: function(target, key, receiver) {
collect.startCollect(oID + "" + key);
return Reflect.get(target, key, receiver);
},
set: function(target, key, value, receiver) {
Reflect.set(target, key, value, receiver);
collection[oID + "" + key] &&
collection[oID + "" + key].forEach(c => {
c();
});
}
});
}
var collection = {};
var collect = {
begin: function(handler) {
collection.handler = handler;
collection.now = true;
},
startCollect: function(oIDKey) {
if (collection.now) {
if (collection[oIDKey]) {
collection[oIDKey].push(collection.handler);
} else {
collection[oIDKey] = [collection.handler];
}
}
},
end: function() {
collection.now = false;
}
};

function autorun(handler) {
  collect.begin(handler);
  handler();
  collect.end();
}

var obj = observable({
  a: 1,
  b: 2
});

autorun(() => {
  console.log("obj.a test1", obj.a);
});
// autorun(() => {
//   console.log("obj.a test2", obj.a);
// });
obj.a = '依赖'
obj.b = '不依赖'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容