[{"data":1,"prerenderedAt":2371},["ShallowReactive",2],{"page-\u002Fvue\u002Fvue数据双向绑定":3},{"id":4,"title":5,"body":6,"description":2364,"extension":2365,"meta":2366,"navigation":1057,"path":2367,"seo":2368,"stem":2369,"__hash__":2370},"content\u002FVue\u002FVue数据双向绑定.md","Vue数据双向绑定",{"type":7,"value":8,"toc":2357},"minimark",[9,13,42,46,85,387,434,437,442,497,535,584,630,738,820,881,884,925,2333,2336,2344,2347,2353],[10,11,5],"h1",{"id":12},"vue数据双向绑定",[14,15,16,20,21,25,26,29,30,33,34,37,38,41],"p",{},[17,18,19],"code",{},"Vue","是通过",[22,23,24],"strong",{},"数据劫持的方式来实现数据双向数据绑定","的，其中最核心的方法便是通过",[17,27,28],{},"Object.defineProperty()","来实现对属性的劫持，该方法允许",[22,31,32],{},"精确地添加或修改对象的属性","，对数据添加属性描述符中的",[17,35,36],{},"getter","与",[17,39,40],{},"setter","实现劫持。",[43,44,45],"h2",{"id":45},"描述",[14,47,48,49,51,52,55,56,59,60,37,63,66,67,69,70,37,72,20,74,77,78,80,81,84],{},"运行一个",[17,50,19],{},"实例并将",[17,53,54],{},"data","打印，可以看到对象中对于",[17,57,58],{},"msg","有了",[17,61,62],{},"get",[17,64,65],{},"set","，通过他们就可以实现数据的劫持，从而进行数据的更新，在",[17,68,19],{},"中",[17,71,62],{},[17,73,65],{},[17,75,76],{},"ES5","的",[17,79,28],{},"方法定义的，该方法的具体功能可以查阅",[17,82,83],{},"https:\u002F\u002Fgithub.com\u002FWindrunnerMax\u002FEveryDay\u002Fblob\u002Fmaster\u002FJavaScript\u002FdefineProperty.md","。",[86,87,92],"pre",{"className":88,"code":89,"language":90,"meta":91,"style":91},"language-html shiki shiki-themes github-light github-dark","\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003Ctitle>数据绑定\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n    \u003Cdiv id=\"app\">\n        \u003Cdiv>{{msg}}\u003C\u002Fdiv>\n    \u003C\u002Fdiv> \n\u003C\u002Fbody>\n\u003Cscript src=\"https:\u002F\u002Fcdn.bootcss.com\u002Fvue\u002F2.4.2\u002Fvue.js\">\u003C\u002Fscript>\n\u003Cscript type=\"text\u002Fjavascript\">\n    var vm = new Vue({\n        el: '#app',\n        data: {\n            msg: 'Data'\n        },\n        created: function() {\n            console.log(this.$data); \u002F\u002F{__ob__: Observer} \n        }\n    })\n\u003C\u002Fscript>\n\u003C\u002Fhtml>\n","html","",[17,93,94,114,124,134,150,160,170,190,205,216,225,248,265,286,298,304,313,319,334,357,363,369,378],{"__ignoreMap":91},[95,96,99,103,107,111],"span",{"class":97,"line":98},"line",1,[95,100,102],{"class":101},"sVt8B","\u003C!",[95,104,106],{"class":105},"s9eBZ","DOCTYPE",[95,108,110],{"class":109},"sScJk"," html",[95,112,113],{"class":101},">\n",[95,115,117,120,122],{"class":97,"line":116},2,[95,118,119],{"class":101},"\u003C",[95,121,90],{"class":105},[95,123,113],{"class":101},[95,125,127,129,132],{"class":97,"line":126},3,[95,128,119],{"class":101},[95,130,131],{"class":105},"head",[95,133,113],{"class":101},[95,135,137,140,143,146,148],{"class":97,"line":136},4,[95,138,139],{"class":101},"    \u003C",[95,141,142],{"class":105},"title",[95,144,145],{"class":101},">数据绑定\u003C\u002F",[95,147,142],{"class":105},[95,149,113],{"class":101},[95,151,153,156,158],{"class":97,"line":152},5,[95,154,155],{"class":101},"\u003C\u002F",[95,157,131],{"class":105},[95,159,113],{"class":101},[95,161,163,165,168],{"class":97,"line":162},6,[95,164,119],{"class":101},[95,166,167],{"class":105},"body",[95,169,113],{"class":101},[95,171,173,175,178,181,184,188],{"class":97,"line":172},7,[95,174,139],{"class":101},[95,176,177],{"class":105},"div",[95,179,180],{"class":109}," id",[95,182,183],{"class":101},"=",[95,185,187],{"class":186},"sZZnC","\"app\"",[95,189,113],{"class":101},[95,191,193,196,198,201,203],{"class":97,"line":192},8,[95,194,195],{"class":101},"        \u003C",[95,197,177],{"class":105},[95,199,200],{"class":101},">{{msg}}\u003C\u002F",[95,202,177],{"class":105},[95,204,113],{"class":101},[95,206,208,211,213],{"class":97,"line":207},9,[95,209,210],{"class":101},"    \u003C\u002F",[95,212,177],{"class":105},[95,214,215],{"class":101},"> \n",[95,217,219,221,223],{"class":97,"line":218},10,[95,220,155],{"class":101},[95,222,167],{"class":105},[95,224,113],{"class":101},[95,226,228,230,233,236,238,241,244,246],{"class":97,"line":227},11,[95,229,119],{"class":101},[95,231,232],{"class":105},"script",[95,234,235],{"class":109}," src",[95,237,183],{"class":101},[95,239,240],{"class":186},"\"https:\u002F\u002Fcdn.bootcss.com\u002Fvue\u002F2.4.2\u002Fvue.js\"",[95,242,243],{"class":101},">\u003C\u002F",[95,245,232],{"class":105},[95,247,113],{"class":101},[95,249,251,253,255,258,260,263],{"class":97,"line":250},12,[95,252,119],{"class":101},[95,254,232],{"class":105},[95,256,257],{"class":109}," type",[95,259,183],{"class":101},[95,261,262],{"class":186},"\"text\u002Fjavascript\"",[95,264,113],{"class":101},[95,266,268,272,275,277,280,283],{"class":97,"line":267},13,[95,269,271],{"class":270},"szBVR","    var",[95,273,274],{"class":101}," vm ",[95,276,183],{"class":270},[95,278,279],{"class":270}," new",[95,281,282],{"class":109}," Vue",[95,284,285],{"class":101},"({\n",[95,287,289,292,295],{"class":97,"line":288},14,[95,290,291],{"class":101},"        el: ",[95,293,294],{"class":186},"'#app'",[95,296,297],{"class":101},",\n",[95,299,301],{"class":97,"line":300},15,[95,302,303],{"class":101},"        data: {\n",[95,305,307,310],{"class":97,"line":306},16,[95,308,309],{"class":101},"            msg: ",[95,311,312],{"class":186},"'Data'\n",[95,314,316],{"class":97,"line":315},17,[95,317,318],{"class":101},"        },\n",[95,320,322,325,328,331],{"class":97,"line":321},18,[95,323,324],{"class":109},"        created",[95,326,327],{"class":101},": ",[95,329,330],{"class":270},"function",[95,332,333],{"class":101},"() {\n",[95,335,337,340,343,346,350,353],{"class":97,"line":336},19,[95,338,339],{"class":101},"            console.",[95,341,342],{"class":109},"log",[95,344,345],{"class":101},"(",[95,347,349],{"class":348},"sj4cs","this",[95,351,352],{"class":101},".$data); ",[95,354,356],{"class":355},"sJ8bj","\u002F\u002F{__ob__: Observer} \n",[95,358,360],{"class":97,"line":359},20,[95,361,362],{"class":101},"        }\n",[95,364,366],{"class":97,"line":365},21,[95,367,368],{"class":101},"    })\n",[95,370,372,374,376],{"class":97,"line":371},22,[95,373,155],{"class":101},[95,375,232],{"class":105},[95,377,113],{"class":101},[95,379,381,383,385],{"class":97,"line":380},23,[95,382,155],{"class":101},[95,384,90],{"class":105},[95,386,113],{"class":101},[86,388,392],{"className":389,"code":390,"language":391,"meta":91,"style":91},"language-javascript shiki shiki-themes github-light github-dark","\u002F*\n{__ob__: Observer}\n    msg: \"Data\"\n    __ob__: Observer {value: {…}, dep: Dep, vmCount: 1}\n    get msg: ƒ reactiveGetter()\n    set msg: ƒ reactiveSetter(newVal)\n    __proto__: Object\n*\u002F\n","javascript",[17,393,394,399,404,409,414,419,424,429],{"__ignoreMap":91},[95,395,396],{"class":97,"line":98},[95,397,398],{},"\u002F*\n",[95,400,401],{"class":97,"line":116},[95,402,403],{},"{__ob__: Observer}\n",[95,405,406],{"class":97,"line":126},[95,407,408],{},"    msg: \"Data\"\n",[95,410,411],{"class":97,"line":136},[95,412,413],{},"    __ob__: Observer {value: {…}, dep: Dep, vmCount: 1}\n",[95,415,416],{"class":97,"line":152},[95,417,418],{},"    get msg: ƒ reactiveGetter()\n",[95,420,421],{"class":97,"line":162},[95,422,423],{},"    set msg: ƒ reactiveSetter(newVal)\n",[95,425,426],{"class":97,"line":172},[95,427,428],{},"    __proto__: Object\n",[95,430,431],{"class":97,"line":192},[95,432,433],{},"*\u002F\n",[43,435,436],{"id":436},"分析实现",[14,438,439,441],{},[17,440,19],{},"的双向数据绑定，简单点来说分为以下三个部分：",[443,444,445,463,474],"ul",{},[446,447,448,451,452,455,456,459,460,84],"li",{},[17,449,450],{},"Observer",": 这里的主要工作是",[22,453,454],{},"递归地监听对象上的所有属性","，在",[22,457,458],{},"属性值改变的时候","，触发相应的",[17,461,462],{},"Watcher",[446,464,465,467,468,455,471,473],{},[17,466,462],{},": 观察者，当监听的数据值修改时，",[22,469,470],{},"执行响应的回调函数",[17,472,19],{},"里面的更新模板内容。",[446,475,476,479,480,482,483,485,486,488,489,491,492,494,495,84],{},[17,477,478],{},"Dep",": 链接",[17,481,450],{},"和",[17,484,462],{},"的桥梁，每一个",[17,487,450],{},"对应一个",[17,490,478],{},"，它内部维护一个数组，保存与该",[17,493,450],{},"相关的",[17,496,462],{},[14,498,499,500,503,504,506,507,510,511,513,514,482,516,518,519,522,523,526,527,530,531,534],{},"根据上面的三部分实现一个功能非常简单的",[17,501,502],{},"Demo","，实际",[17,505,19],{},"中的数据在页面的更新是异步的，且存在大量优化，实际非常复杂。",[508,509],"br",{},"\n首先实现",[17,512,478],{},"方法，这是链接",[17,515,450],{},[17,517,462],{},"的桥梁，简单来说，就是一个监听者模式的事件总线，负责接收",[17,520,521],{},"watcher","并保存。其中",[17,524,525],{},"subscribers","数组用以保存将要触发的事件，",[17,528,529],{},"addSub","方法用以添加事件，",[17,532,533],{},"notify","方法用以触发事件。",[86,536,538],{"className":389,"code":537,"language":391,"meta":91,"style":91},"function __dep(){\n    this.subscribers = [];\n    this.addSub = function(watcher){\n        if(__dep.target && !this.subscribers.includes(__dep.target) ) this.subscribers.push(watcher);\n    }\n    this.notifyAll = function(){\n        this.subscribers.forEach( watcher => watcher.update());\n    }\n}\n",[17,539,540,545,550,555,560,565,570,575,579],{"__ignoreMap":91},[95,541,542],{"class":97,"line":98},[95,543,544],{},"function __dep(){\n",[95,546,547],{"class":97,"line":116},[95,548,549],{},"    this.subscribers = [];\n",[95,551,552],{"class":97,"line":126},[95,553,554],{},"    this.addSub = function(watcher){\n",[95,556,557],{"class":97,"line":136},[95,558,559],{},"        if(__dep.target && !this.subscribers.includes(__dep.target) ) this.subscribers.push(watcher);\n",[95,561,562],{"class":97,"line":152},[95,563,564],{},"    }\n",[95,566,567],{"class":97,"line":162},[95,568,569],{},"    this.notifyAll = function(){\n",[95,571,572],{"class":97,"line":172},[95,573,574],{},"        this.subscribers.forEach( watcher => watcher.update());\n",[95,576,577],{"class":97,"line":192},[95,578,564],{},[95,580,581],{"class":97,"line":207},[95,582,583],{},"}\n",[14,585,586,588,589,592,593,595,596,37,598,600,601,604,605,608,609,611,612,37,614,616,617,619,620,623,624,626,627,629],{},[17,587,450],{},"方法就是将数据进行劫持，使用",[17,590,591],{},"Object.defineProperty","对属性进行重定义，注意一个属性描述符只能是数据描述符和存取描述符这两者其中之一，不能同时是两者，所以在这个小",[17,594,502],{},"中使用",[17,597,36],{},[17,599,40],{},"操作的的是定义的",[17,602,603],{},"value","局部变量，主要是利用了",[17,606,607],{},"let","的块级作用域定义",[17,610,603],{},"局部变量并利用闭包的原理实现了",[17,613,36],{},[17,615,40],{},"操作",[17,618,603],{},"，对于每个数据绑定时都有一个自己的",[17,621,622],{},"dep","实例，利用这个总线来保存关于这个属性的",[17,625,462],{},"，并在",[17,628,65],{},"更新数据的时候触发。",[86,631,633],{"className":389,"code":632,"language":391,"meta":91,"style":91},"function __observe(obj){\n    for(let item in obj){\n        let dep = new __dep();\n        let value = obj[item];\n        if (Object.prototype.toString.call(value) === \"[object Object]\") __observe(value);\n        Object.defineProperty(obj, item, {\n            configurable: true,\n            enumerable: true,\n            get: function reactiveGetter() {\n                if(__dep.target) dep.addSub(__dep.target);\n                return value;\n            },\n            set: function reactiveSetter(newVal) {\n                if (value === newVal) return value;\n                value = newVal;\n                dep.notifyAll();\n            }\n        });\n    }\n    return obj;\n}\n",[17,634,635,640,645,650,655,660,665,670,675,680,685,690,695,700,705,710,715,720,725,729,734],{"__ignoreMap":91},[95,636,637],{"class":97,"line":98},[95,638,639],{},"function __observe(obj){\n",[95,641,642],{"class":97,"line":116},[95,643,644],{},"    for(let item in obj){\n",[95,646,647],{"class":97,"line":126},[95,648,649],{},"        let dep = new __dep();\n",[95,651,652],{"class":97,"line":136},[95,653,654],{},"        let value = obj[item];\n",[95,656,657],{"class":97,"line":152},[95,658,659],{},"        if (Object.prototype.toString.call(value) === \"[object Object]\") __observe(value);\n",[95,661,662],{"class":97,"line":162},[95,663,664],{},"        Object.defineProperty(obj, item, {\n",[95,666,667],{"class":97,"line":172},[95,668,669],{},"            configurable: true,\n",[95,671,672],{"class":97,"line":192},[95,673,674],{},"            enumerable: true,\n",[95,676,677],{"class":97,"line":207},[95,678,679],{},"            get: function reactiveGetter() {\n",[95,681,682],{"class":97,"line":218},[95,683,684],{},"                if(__dep.target) dep.addSub(__dep.target);\n",[95,686,687],{"class":97,"line":227},[95,688,689],{},"                return value;\n",[95,691,692],{"class":97,"line":250},[95,693,694],{},"            },\n",[95,696,697],{"class":97,"line":267},[95,698,699],{},"            set: function reactiveSetter(newVal) {\n",[95,701,702],{"class":97,"line":288},[95,703,704],{},"                if (value === newVal) return value;\n",[95,706,707],{"class":97,"line":300},[95,708,709],{},"                value = newVal;\n",[95,711,712],{"class":97,"line":306},[95,713,714],{},"                dep.notifyAll();\n",[95,716,717],{"class":97,"line":315},[95,718,719],{},"            }\n",[95,721,722],{"class":97,"line":321},[95,723,724],{},"        });\n",[95,726,727],{"class":97,"line":336},[95,728,564],{},[95,730,731],{"class":97,"line":359},[95,732,733],{},"    return obj;\n",[95,735,736],{"class":97,"line":365},[95,737,583],{},[14,739,740,742,743,746,747,750,751,754,755,758,759,761,762,764,765,767,768,770,771,774,775,777,778,77,780,783,784,786,787,789,790,792,793,795,796,798,799,801,802,804,805,808,809,811,812,814,815,77,817,819],{},[17,741,462],{},"方法传入一个回调函数，用以执行数据变更后的操作，一般是用来进行模板的渲染，",[17,744,745],{},"update","方法就是在数据变更后执行的方法，",[17,748,749],{},"activeRun","是首次进行绑定时执行的操作，关于这个操作中的",[17,752,753],{},"__dep.target","，他的主要目的是将执行回调函数相关的数据进行",[17,756,757],{},"sub","，例如在回调函数中用到了",[17,760,58],{},"，那么在执行这个",[17,763,749],{},"的时候",[17,766,753],{},"就会指向",[17,769,349],{},"，然后执行",[17,772,773],{},"fn()","的时候会取得",[17,776,58],{},"，此时就会触发",[17,779,58],{},[17,781,782],{},"get()","，而",[17,785,62],{},"中会判断这个",[17,788,753],{},"是不是空，此时这个",[17,791,753],{},"不为空，上文提到了每个属性都会有一个自己的",[17,794,622],{},"实例，此时这个",[17,797,753],{},"便加入自身实例的",[17,800,525],{},"，在执行完之后，便将",[17,803,753],{},"设置为",[17,806,807],{},"null","，重复这个过程将所有的相关属性与",[17,810,521],{},"进行了绑定，在相关属性进行",[17,813,65],{},"时，就会触发各个",[17,816,521],{},[17,818,745],{},"然后执行渲染等操作。",[86,821,823],{"className":389,"code":822,"language":391,"meta":91,"style":91},"function __watcher(fn){\n    this.update = function(){\n        fn();\n    }\n    \n    this.activeRun = function(){\n        __dep.target = this;\n        fn();\n        __dep.target = null;\n    }\n    this.activeRun();\n}\n",[17,824,825,830,835,840,844,849,854,859,863,868,872,877],{"__ignoreMap":91},[95,826,827],{"class":97,"line":98},[95,828,829],{},"function __watcher(fn){\n",[95,831,832],{"class":97,"line":116},[95,833,834],{},"    this.update = function(){\n",[95,836,837],{"class":97,"line":126},[95,838,839],{},"        fn();\n",[95,841,842],{"class":97,"line":136},[95,843,564],{},[95,845,846],{"class":97,"line":152},[95,847,848],{},"    \n",[95,850,851],{"class":97,"line":162},[95,852,853],{},"    this.activeRun = function(){\n",[95,855,856],{"class":97,"line":172},[95,857,858],{},"        __dep.target = this;\n",[95,860,861],{"class":97,"line":192},[95,862,839],{},[95,864,865],{"class":97,"line":207},[95,866,867],{},"        __dep.target = null;\n",[95,869,870],{"class":97,"line":218},[95,871,564],{},[95,873,874],{"class":97,"line":227},[95,875,876],{},"    this.activeRun();\n",[95,878,879],{"class":97,"line":250},[95,880,583],{},[43,882,883],{"id":883},"代码示例",[14,885,886,887,889,890,893,894,897,898,901,902,904,905,907,908,911,912,915,916,919,920,922,923,84],{},"这是上述的小",[17,888,502],{},"的代码示例，其中上文没有提到的",[17,891,892],{},"__proxy","函数主要是为了将",[17,895,896],{},"vm.$data","中的属性直接代理到",[17,899,900],{},"vm","对象上，两个",[17,903,521],{},"中第一个是为了打印并查看数据，第二个是之前做的一个非常简单的模板引擎的渲染，为了演示数据变更使得页面数据重新渲染，在这个",[17,906,502],{},"下打开控制台，输入",[17,909,910],{},"vm.msg = 11;","即可触发页面的数据更改，也可以通过在",[17,913,914],{},"40","行添加一行",[17,917,918],{},"console.log(dep);","来查看每个属性的",[17,921,622],{},"绑定的",[17,924,521],{},[86,926,928],{"className":88,"code":927,"language":90,"meta":91,"style":91},"\u003C!DOCTYPE html>\n\u003Chtml>\n\u003Chead>\n    \u003Ctitle>数据绑定\u003C\u002Ftitle>\n\u003C\u002Fhead>\n\u003Cbody>\n    \u003Cdiv id=\"app\">\n        \u003Cdiv>{{msg}}\u003C\u002Fdiv>\n        \u003Cdiv>{{date}}\u003C\u002Fdiv>\n    \u003C\u002Fdiv> \n\u003C\u002Fbody>\n\u003Cscript type=\"text\u002Fjavascript\">\n\n    var Mvvm = function(config) {\n        this.$el = config.el;\n        this.__root = document.querySelector(this.$el);\n        this.__originHTML = this.__root.innerHTML;\n\n        function __dep(){\n            this.subscribers = [];\n            this.addSub = function(watcher){\n                if(__dep.target && !this.subscribers.includes(__dep.target) ) this.subscribers.push(watcher);\n            }\n            this.notifyAll = function(){\n                this.subscribers.forEach( watcher => watcher.update());\n            }\n        }\n\n\n        function __observe(obj){\n            for(let item in obj){\n                let dep = new __dep();\n                let value = obj[item];\n                if (Object.prototype.toString.call(value) === \"[object Object]\") __observe(value);\n                Object.defineProperty(obj, item, {\n                    configurable: true,\n                    enumerable: true,\n                    get: function reactiveGetter() {\n                        if(__dep.target) dep.addSub(__dep.target);\n                        return value;\n                    },\n                    set: function reactiveSetter(newVal) {\n                        if (value === newVal) return value;\n                        value = newVal;\n                        dep.notifyAll();\n                    }\n                });\n            }\n            return obj;\n        }\n\n        this.$data = __observe(config.data);\n\n        function __proxy (target) {\n            for(let item in target){\n                Object.defineProperty(this, item, {\n                    configurable: true,\n                    enumerable: true,\n                    get: function proxyGetter() {\n                        return this.$data[item];\n                    },\n                    set: function proxySetter(newVal) {\n                        this.$data[item] = newVal;\n                    }\n                });\n            }\n        }\n\n        __proxy.call(this, config.data);\n\n        function __watcher(fn){\n            this.update = function(){\n                fn();\n            }\n            \n            this.activeRun = function(){\n                __dep.target = this;\n                fn();\n                __dep.target = null;\n            }\n            this.activeRun();\n        }\n\n        new __watcher(() => {\n            console.log(this.msg, this.date);\n        })\n\n        new __watcher(() => {\n            var html = String(this.__originHTML||'').replace(\u002F\"\u002Fg,'\\\\\"').replace(\u002F\\s+|\\r|\\t|\\n\u002Fg, ' ')\n            .replace(\u002F\\{\\{(.)*?\\}\\}\u002Fg, function(value){ \n                return  value.replace(\"{{\",'\"+(').replace(\"}}\",')+\"');\n            })\n            html = `var targetHTML = \"${html}\";return targetHTML;`;\n            var parsedHTML = new Function(...Object.keys(this.$data), html)(...Object.values(this.$data));\n            this.__root.innerHTML = parsedHTML;\n        })\n\n    }\n\n    var vm = new Mvvm({\n        el: \"#app\",\n        data: {\n            msg: \"1\",\n            date: new Date(),\n            obj: {\n                a: 1,\n                b: 11\n            }\n        }\n    })\n\n\u003C\u002Fscript>\n\u003C\u002Fhtml>\n",[17,929,930,940,948,956,968,976,984,998,1010,1023,1031,1039,1053,1059,1081,1094,1116,1131,1135,1146,1159,1179,1214,1218,1234,1261,1266,1271,1276,1281,1296,1315,1333,1346,1386,1398,1409,1419,1434,1448,1457,1463,1483,1501,1512,1522,1528,1534,1539,1548,1553,1558,1573,1578,1593,1609,1623,1632,1641,1655,1665,1670,1688,1701,1706,1711,1716,1721,1726,1741,1746,1761,1776,1784,1789,1795,1810,1823,1830,1842,1847,1858,1863,1868,1885,1904,1910,1915,1928,2028,2072,2110,2116,2134,2181,2194,2199,2204,2209,2214,2229,2239,2244,2254,2269,2275,2286,2295,2300,2305,2310,2315,2324],{"__ignoreMap":91},[95,931,932,934,936,938],{"class":97,"line":98},[95,933,102],{"class":101},[95,935,106],{"class":105},[95,937,110],{"class":109},[95,939,113],{"class":101},[95,941,942,944,946],{"class":97,"line":116},[95,943,119],{"class":101},[95,945,90],{"class":105},[95,947,113],{"class":101},[95,949,950,952,954],{"class":97,"line":126},[95,951,119],{"class":101},[95,953,131],{"class":105},[95,955,113],{"class":101},[95,957,958,960,962,964,966],{"class":97,"line":136},[95,959,139],{"class":101},[95,961,142],{"class":105},[95,963,145],{"class":101},[95,965,142],{"class":105},[95,967,113],{"class":101},[95,969,970,972,974],{"class":97,"line":152},[95,971,155],{"class":101},[95,973,131],{"class":105},[95,975,113],{"class":101},[95,977,978,980,982],{"class":97,"line":162},[95,979,119],{"class":101},[95,981,167],{"class":105},[95,983,113],{"class":101},[95,985,986,988,990,992,994,996],{"class":97,"line":172},[95,987,139],{"class":101},[95,989,177],{"class":105},[95,991,180],{"class":109},[95,993,183],{"class":101},[95,995,187],{"class":186},[95,997,113],{"class":101},[95,999,1000,1002,1004,1006,1008],{"class":97,"line":192},[95,1001,195],{"class":101},[95,1003,177],{"class":105},[95,1005,200],{"class":101},[95,1007,177],{"class":105},[95,1009,113],{"class":101},[95,1011,1012,1014,1016,1019,1021],{"class":97,"line":207},[95,1013,195],{"class":101},[95,1015,177],{"class":105},[95,1017,1018],{"class":101},">{{date}}\u003C\u002F",[95,1020,177],{"class":105},[95,1022,113],{"class":101},[95,1024,1025,1027,1029],{"class":97,"line":218},[95,1026,210],{"class":101},[95,1028,177],{"class":105},[95,1030,215],{"class":101},[95,1032,1033,1035,1037],{"class":97,"line":227},[95,1034,155],{"class":101},[95,1036,167],{"class":105},[95,1038,113],{"class":101},[95,1040,1041,1043,1045,1047,1049,1051],{"class":97,"line":250},[95,1042,119],{"class":101},[95,1044,232],{"class":105},[95,1046,257],{"class":109},[95,1048,183],{"class":101},[95,1050,262],{"class":186},[95,1052,113],{"class":101},[95,1054,1055],{"class":97,"line":267},[95,1056,1058],{"emptyLinePlaceholder":1057},true,"\n",[95,1060,1061,1063,1066,1069,1072,1074,1078],{"class":97,"line":288},[95,1062,271],{"class":270},[95,1064,1065],{"class":109}," Mvvm",[95,1067,1068],{"class":270}," =",[95,1070,1071],{"class":270}," function",[95,1073,345],{"class":101},[95,1075,1077],{"class":1076},"s4XuR","config",[95,1079,1080],{"class":101},") {\n",[95,1082,1083,1086,1089,1091],{"class":97,"line":300},[95,1084,1085],{"class":348},"        this",[95,1087,1088],{"class":101},".$el ",[95,1090,183],{"class":270},[95,1092,1093],{"class":101}," config.el;\n",[95,1095,1096,1098,1101,1103,1106,1109,1111,1113],{"class":97,"line":306},[95,1097,1085],{"class":348},[95,1099,1100],{"class":101},".__root ",[95,1102,183],{"class":270},[95,1104,1105],{"class":101}," document.",[95,1107,1108],{"class":109},"querySelector",[95,1110,345],{"class":101},[95,1112,349],{"class":348},[95,1114,1115],{"class":101},".$el);\n",[95,1117,1118,1120,1123,1125,1128],{"class":97,"line":315},[95,1119,1085],{"class":348},[95,1121,1122],{"class":101},".__originHTML ",[95,1124,183],{"class":270},[95,1126,1127],{"class":348}," this",[95,1129,1130],{"class":101},".__root.innerHTML;\n",[95,1132,1133],{"class":97,"line":321},[95,1134,1058],{"emptyLinePlaceholder":1057},[95,1136,1137,1140,1143],{"class":97,"line":336},[95,1138,1139],{"class":270},"        function",[95,1141,1142],{"class":109}," __dep",[95,1144,1145],{"class":101},"(){\n",[95,1147,1148,1151,1154,1156],{"class":97,"line":359},[95,1149,1150],{"class":348},"            this",[95,1152,1153],{"class":101},".subscribers ",[95,1155,183],{"class":270},[95,1157,1158],{"class":101}," [];\n",[95,1160,1161,1163,1166,1168,1170,1172,1174,1176],{"class":97,"line":365},[95,1162,1150],{"class":348},[95,1164,1165],{"class":101},".",[95,1167,529],{"class":109},[95,1169,1068],{"class":270},[95,1171,1071],{"class":270},[95,1173,345],{"class":101},[95,1175,521],{"class":1076},[95,1177,1178],{"class":101},"){\n",[95,1180,1181,1184,1187,1190,1193,1195,1198,1201,1204,1206,1208,1211],{"class":97,"line":371},[95,1182,1183],{"class":270},"                if",[95,1185,1186],{"class":101},"(__dep.target ",[95,1188,1189],{"class":270},"&&",[95,1191,1192],{"class":270}," !",[95,1194,349],{"class":348},[95,1196,1197],{"class":101},".subscribers.",[95,1199,1200],{"class":109},"includes",[95,1202,1203],{"class":101},"(__dep.target) ) ",[95,1205,349],{"class":348},[95,1207,1197],{"class":101},[95,1209,1210],{"class":109},"push",[95,1212,1213],{"class":101},"(watcher);\n",[95,1215,1216],{"class":97,"line":380},[95,1217,719],{"class":101},[95,1219,1221,1223,1225,1228,1230,1232],{"class":97,"line":1220},24,[95,1222,1150],{"class":348},[95,1224,1165],{"class":101},[95,1226,1227],{"class":109},"notifyAll",[95,1229,1068],{"class":270},[95,1231,1071],{"class":270},[95,1233,1145],{"class":101},[95,1235,1237,1240,1242,1245,1248,1250,1253,1256,1258],{"class":97,"line":1236},25,[95,1238,1239],{"class":348},"                this",[95,1241,1197],{"class":101},[95,1243,1244],{"class":109},"forEach",[95,1246,1247],{"class":101},"( ",[95,1249,521],{"class":1076},[95,1251,1252],{"class":270}," =>",[95,1254,1255],{"class":101}," watcher.",[95,1257,745],{"class":109},[95,1259,1260],{"class":101},"());\n",[95,1262,1264],{"class":97,"line":1263},26,[95,1265,719],{"class":101},[95,1267,1269],{"class":97,"line":1268},27,[95,1270,362],{"class":101},[95,1272,1274],{"class":97,"line":1273},28,[95,1275,1058],{"emptyLinePlaceholder":1057},[95,1277,1279],{"class":97,"line":1278},29,[95,1280,1058],{"emptyLinePlaceholder":1057},[95,1282,1284,1286,1289,1291,1294],{"class":97,"line":1283},30,[95,1285,1139],{"class":270},[95,1287,1288],{"class":109}," __observe",[95,1290,345],{"class":101},[95,1292,1293],{"class":1076},"obj",[95,1295,1178],{"class":101},[95,1297,1299,1302,1304,1306,1309,1312],{"class":97,"line":1298},31,[95,1300,1301],{"class":270},"            for",[95,1303,345],{"class":101},[95,1305,607],{"class":270},[95,1307,1308],{"class":101}," item ",[95,1310,1311],{"class":270},"in",[95,1313,1314],{"class":101}," obj){\n",[95,1316,1318,1321,1324,1326,1328,1330],{"class":97,"line":1317},32,[95,1319,1320],{"class":270},"                let",[95,1322,1323],{"class":101}," dep ",[95,1325,183],{"class":270},[95,1327,279],{"class":270},[95,1329,1142],{"class":109},[95,1331,1332],{"class":101},"();\n",[95,1334,1336,1338,1341,1343],{"class":97,"line":1335},33,[95,1337,1320],{"class":270},[95,1339,1340],{"class":101}," value ",[95,1342,183],{"class":270},[95,1344,1345],{"class":101}," obj[item];\n",[95,1347,1349,1351,1354,1357,1359,1362,1365,1368,1371,1374,1377,1380,1383],{"class":97,"line":1348},34,[95,1350,1183],{"class":270},[95,1352,1353],{"class":101}," (",[95,1355,1356],{"class":348},"Object",[95,1358,1165],{"class":101},[95,1360,1361],{"class":348},"prototype",[95,1363,1364],{"class":101},".toString.",[95,1366,1367],{"class":109},"call",[95,1369,1370],{"class":101},"(value) ",[95,1372,1373],{"class":270},"===",[95,1375,1376],{"class":186}," \"[object Object]\"",[95,1378,1379],{"class":101},") ",[95,1381,1382],{"class":109},"__observe",[95,1384,1385],{"class":101},"(value);\n",[95,1387,1389,1392,1395],{"class":97,"line":1388},35,[95,1390,1391],{"class":101},"                Object.",[95,1393,1394],{"class":109},"defineProperty",[95,1396,1397],{"class":101},"(obj, item, {\n",[95,1399,1401,1404,1407],{"class":97,"line":1400},36,[95,1402,1403],{"class":101},"                    configurable: ",[95,1405,1406],{"class":348},"true",[95,1408,297],{"class":101},[95,1410,1412,1415,1417],{"class":97,"line":1411},37,[95,1413,1414],{"class":101},"                    enumerable: ",[95,1416,1406],{"class":348},[95,1418,297],{"class":101},[95,1420,1422,1425,1427,1429,1432],{"class":97,"line":1421},38,[95,1423,1424],{"class":109},"                    get",[95,1426,327],{"class":101},[95,1428,330],{"class":270},[95,1430,1431],{"class":109}," reactiveGetter",[95,1433,333],{"class":101},[95,1435,1437,1440,1443,1445],{"class":97,"line":1436},39,[95,1438,1439],{"class":270},"                        if",[95,1441,1442],{"class":101},"(__dep.target) dep.",[95,1444,529],{"class":109},[95,1446,1447],{"class":101},"(__dep.target);\n",[95,1449,1451,1454],{"class":97,"line":1450},40,[95,1452,1453],{"class":270},"                        return",[95,1455,1456],{"class":101}," value;\n",[95,1458,1460],{"class":97,"line":1459},41,[95,1461,1462],{"class":101},"                    },\n",[95,1464,1466,1469,1471,1473,1476,1478,1481],{"class":97,"line":1465},42,[95,1467,1468],{"class":109},"                    set",[95,1470,327],{"class":101},[95,1472,330],{"class":270},[95,1474,1475],{"class":109}," reactiveSetter",[95,1477,345],{"class":101},[95,1479,1480],{"class":1076},"newVal",[95,1482,1080],{"class":101},[95,1484,1486,1488,1491,1493,1496,1499],{"class":97,"line":1485},43,[95,1487,1439],{"class":270},[95,1489,1490],{"class":101}," (value ",[95,1492,1373],{"class":270},[95,1494,1495],{"class":101}," newVal) ",[95,1497,1498],{"class":270},"return",[95,1500,1456],{"class":101},[95,1502,1504,1507,1509],{"class":97,"line":1503},44,[95,1505,1506],{"class":101},"                        value ",[95,1508,183],{"class":270},[95,1510,1511],{"class":101}," newVal;\n",[95,1513,1515,1518,1520],{"class":97,"line":1514},45,[95,1516,1517],{"class":101},"                        dep.",[95,1519,1227],{"class":109},[95,1521,1332],{"class":101},[95,1523,1525],{"class":97,"line":1524},46,[95,1526,1527],{"class":101},"                    }\n",[95,1529,1531],{"class":97,"line":1530},47,[95,1532,1533],{"class":101},"                });\n",[95,1535,1537],{"class":97,"line":1536},48,[95,1538,719],{"class":101},[95,1540,1542,1545],{"class":97,"line":1541},49,[95,1543,1544],{"class":270},"            return",[95,1546,1547],{"class":101}," obj;\n",[95,1549,1551],{"class":97,"line":1550},50,[95,1552,362],{"class":101},[95,1554,1556],{"class":97,"line":1555},51,[95,1557,1058],{"emptyLinePlaceholder":1057},[95,1559,1561,1563,1566,1568,1570],{"class":97,"line":1560},52,[95,1562,1085],{"class":348},[95,1564,1565],{"class":101},".$data ",[95,1567,183],{"class":270},[95,1569,1288],{"class":109},[95,1571,1572],{"class":101},"(config.data);\n",[95,1574,1576],{"class":97,"line":1575},53,[95,1577,1058],{"emptyLinePlaceholder":1057},[95,1579,1581,1583,1586,1588,1591],{"class":97,"line":1580},54,[95,1582,1139],{"class":270},[95,1584,1585],{"class":109}," __proxy",[95,1587,1353],{"class":101},[95,1589,1590],{"class":1076},"target",[95,1592,1080],{"class":101},[95,1594,1596,1598,1600,1602,1604,1606],{"class":97,"line":1595},55,[95,1597,1301],{"class":270},[95,1599,345],{"class":101},[95,1601,607],{"class":270},[95,1603,1308],{"class":101},[95,1605,1311],{"class":270},[95,1607,1608],{"class":101}," target){\n",[95,1610,1612,1614,1616,1618,1620],{"class":97,"line":1611},56,[95,1613,1391],{"class":101},[95,1615,1394],{"class":109},[95,1617,345],{"class":101},[95,1619,349],{"class":348},[95,1621,1622],{"class":101},", item, {\n",[95,1624,1626,1628,1630],{"class":97,"line":1625},57,[95,1627,1403],{"class":101},[95,1629,1406],{"class":348},[95,1631,297],{"class":101},[95,1633,1635,1637,1639],{"class":97,"line":1634},58,[95,1636,1414],{"class":101},[95,1638,1406],{"class":348},[95,1640,297],{"class":101},[95,1642,1644,1646,1648,1650,1653],{"class":97,"line":1643},59,[95,1645,1424],{"class":109},[95,1647,327],{"class":101},[95,1649,330],{"class":270},[95,1651,1652],{"class":109}," proxyGetter",[95,1654,333],{"class":101},[95,1656,1658,1660,1662],{"class":97,"line":1657},60,[95,1659,1453],{"class":270},[95,1661,1127],{"class":348},[95,1663,1664],{"class":101},".$data[item];\n",[95,1666,1668],{"class":97,"line":1667},61,[95,1669,1462],{"class":101},[95,1671,1673,1675,1677,1679,1682,1684,1686],{"class":97,"line":1672},62,[95,1674,1468],{"class":109},[95,1676,327],{"class":101},[95,1678,330],{"class":270},[95,1680,1681],{"class":109}," proxySetter",[95,1683,345],{"class":101},[95,1685,1480],{"class":1076},[95,1687,1080],{"class":101},[95,1689,1691,1694,1697,1699],{"class":97,"line":1690},63,[95,1692,1693],{"class":348},"                        this",[95,1695,1696],{"class":101},".$data[item] ",[95,1698,183],{"class":270},[95,1700,1511],{"class":101},[95,1702,1704],{"class":97,"line":1703},64,[95,1705,1527],{"class":101},[95,1707,1709],{"class":97,"line":1708},65,[95,1710,1533],{"class":101},[95,1712,1714],{"class":97,"line":1713},66,[95,1715,719],{"class":101},[95,1717,1719],{"class":97,"line":1718},67,[95,1720,362],{"class":101},[95,1722,1724],{"class":97,"line":1723},68,[95,1725,1058],{"emptyLinePlaceholder":1057},[95,1727,1729,1732,1734,1736,1738],{"class":97,"line":1728},69,[95,1730,1731],{"class":101},"        __proxy.",[95,1733,1367],{"class":109},[95,1735,345],{"class":101},[95,1737,349],{"class":348},[95,1739,1740],{"class":101},", config.data);\n",[95,1742,1744],{"class":97,"line":1743},70,[95,1745,1058],{"emptyLinePlaceholder":1057},[95,1747,1749,1751,1754,1756,1759],{"class":97,"line":1748},71,[95,1750,1139],{"class":270},[95,1752,1753],{"class":109}," __watcher",[95,1755,345],{"class":101},[95,1757,1758],{"class":1076},"fn",[95,1760,1178],{"class":101},[95,1762,1764,1766,1768,1770,1772,1774],{"class":97,"line":1763},72,[95,1765,1150],{"class":348},[95,1767,1165],{"class":101},[95,1769,745],{"class":109},[95,1771,1068],{"class":270},[95,1773,1071],{"class":270},[95,1775,1145],{"class":101},[95,1777,1779,1782],{"class":97,"line":1778},73,[95,1780,1781],{"class":109},"                fn",[95,1783,1332],{"class":101},[95,1785,1787],{"class":97,"line":1786},74,[95,1788,719],{"class":101},[95,1790,1792],{"class":97,"line":1791},75,[95,1793,1794],{"class":101},"            \n",[95,1796,1798,1800,1802,1804,1806,1808],{"class":97,"line":1797},76,[95,1799,1150],{"class":348},[95,1801,1165],{"class":101},[95,1803,749],{"class":109},[95,1805,1068],{"class":270},[95,1807,1071],{"class":270},[95,1809,1145],{"class":101},[95,1811,1813,1816,1818,1820],{"class":97,"line":1812},77,[95,1814,1815],{"class":101},"                __dep.target ",[95,1817,183],{"class":270},[95,1819,1127],{"class":348},[95,1821,1822],{"class":101},";\n",[95,1824,1826,1828],{"class":97,"line":1825},78,[95,1827,1781],{"class":109},[95,1829,1332],{"class":101},[95,1831,1833,1835,1837,1840],{"class":97,"line":1832},79,[95,1834,1815],{"class":101},[95,1836,183],{"class":270},[95,1838,1839],{"class":348}," null",[95,1841,1822],{"class":101},[95,1843,1845],{"class":97,"line":1844},80,[95,1846,719],{"class":101},[95,1848,1850,1852,1854,1856],{"class":97,"line":1849},81,[95,1851,1150],{"class":348},[95,1853,1165],{"class":101},[95,1855,749],{"class":109},[95,1857,1332],{"class":101},[95,1859,1861],{"class":97,"line":1860},82,[95,1862,362],{"class":101},[95,1864,1866],{"class":97,"line":1865},83,[95,1867,1058],{"emptyLinePlaceholder":1057},[95,1869,1871,1874,1876,1879,1882],{"class":97,"line":1870},84,[95,1872,1873],{"class":270},"        new",[95,1875,1753],{"class":109},[95,1877,1878],{"class":101},"(() ",[95,1880,1881],{"class":270},"=>",[95,1883,1884],{"class":101}," {\n",[95,1886,1888,1890,1892,1894,1896,1899,1901],{"class":97,"line":1887},85,[95,1889,339],{"class":101},[95,1891,342],{"class":109},[95,1893,345],{"class":101},[95,1895,349],{"class":348},[95,1897,1898],{"class":101},".msg, ",[95,1900,349],{"class":348},[95,1902,1903],{"class":101},".date);\n",[95,1905,1907],{"class":97,"line":1906},86,[95,1908,1909],{"class":101},"        })\n",[95,1911,1913],{"class":97,"line":1912},87,[95,1914,1058],{"emptyLinePlaceholder":1057},[95,1916,1918,1920,1922,1924,1926],{"class":97,"line":1917},88,[95,1919,1873],{"class":270},[95,1921,1753],{"class":109},[95,1923,1878],{"class":101},[95,1925,1881],{"class":270},[95,1927,1884],{"class":101},[95,1929,1931,1934,1937,1939,1942,1944,1946,1949,1952,1955,1958,1961,1963,1966,1970,1972,1975,1978,1981,1984,1987,1989,1991,1993,1995,1998,2001,2004,2007,2010,2012,2015,2017,2019,2022,2025],{"class":97,"line":1930},89,[95,1932,1933],{"class":270},"            var",[95,1935,1936],{"class":101}," html ",[95,1938,183],{"class":270},[95,1940,1941],{"class":109}," String",[95,1943,345],{"class":101},[95,1945,349],{"class":348},[95,1947,1948],{"class":101},".__originHTML",[95,1950,1951],{"class":270},"||",[95,1953,1954],{"class":186},"''",[95,1956,1957],{"class":101},").",[95,1959,1960],{"class":109},"replace",[95,1962,345],{"class":101},[95,1964,1965],{"class":186},"\u002F",[95,1967,1969],{"class":1968},"sA_wV","\"",[95,1971,1965],{"class":186},[95,1973,1974],{"class":270},"g",[95,1976,1977],{"class":101},",",[95,1979,1980],{"class":186},"'",[95,1982,1983],{"class":348},"\\\\",[95,1985,1986],{"class":186},"\"'",[95,1988,1957],{"class":101},[95,1990,1960],{"class":109},[95,1992,345],{"class":101},[95,1994,1965],{"class":186},[95,1996,1997],{"class":348},"\\s",[95,1999,2000],{"class":270},"+|",[95,2002,2003],{"class":348},"\\r",[95,2005,2006],{"class":270},"|",[95,2008,2009],{"class":348},"\\t",[95,2011,2006],{"class":270},[95,2013,2014],{"class":348},"\\n",[95,2016,1965],{"class":186},[95,2018,1974],{"class":270},[95,2020,2021],{"class":101},", ",[95,2023,2024],{"class":186},"' '",[95,2026,2027],{"class":101},")\n",[95,2029,2031,2034,2036,2038,2040,2044,2046,2048,2051,2054,2057,2059,2061,2063,2065,2067,2069],{"class":97,"line":2030},90,[95,2032,2033],{"class":101},"            .",[95,2035,1960],{"class":109},[95,2037,345],{"class":101},[95,2039,1965],{"class":186},[95,2041,2043],{"class":2042},"snhLl","\\{\\{",[95,2045,345],{"class":1968},[95,2047,1165],{"class":348},[95,2049,2050],{"class":1968},")",[95,2052,2053],{"class":270},"*?",[95,2055,2056],{"class":2042},"\\}\\}",[95,2058,1965],{"class":186},[95,2060,1974],{"class":270},[95,2062,2021],{"class":101},[95,2064,330],{"class":270},[95,2066,345],{"class":101},[95,2068,603],{"class":1076},[95,2070,2071],{"class":101},"){ \n",[95,2073,2075,2078,2081,2083,2085,2088,2090,2093,2095,2097,2099,2102,2104,2107],{"class":97,"line":2074},91,[95,2076,2077],{"class":270},"                return",[95,2079,2080],{"class":101},"  value.",[95,2082,1960],{"class":109},[95,2084,345],{"class":101},[95,2086,2087],{"class":186},"\"{{\"",[95,2089,1977],{"class":101},[95,2091,2092],{"class":186},"'\"+('",[95,2094,1957],{"class":101},[95,2096,1960],{"class":109},[95,2098,345],{"class":101},[95,2100,2101],{"class":186},"\"}}\"",[95,2103,1977],{"class":101},[95,2105,2106],{"class":186},"')+\"'",[95,2108,2109],{"class":101},");\n",[95,2111,2113],{"class":97,"line":2112},92,[95,2114,2115],{"class":101},"            })\n",[95,2117,2119,2122,2124,2127,2129,2132],{"class":97,"line":2118},93,[95,2120,2121],{"class":101},"            html ",[95,2123,183],{"class":270},[95,2125,2126],{"class":186}," `var targetHTML = \"${",[95,2128,90],{"class":101},[95,2130,2131],{"class":186},"}\";return targetHTML;`",[95,2133,1822],{"class":101},[95,2135,2137,2139,2142,2144,2146,2149,2151,2154,2157,2160,2162,2164,2167,2169,2171,2174,2176,2178],{"class":97,"line":2136},94,[95,2138,1933],{"class":270},[95,2140,2141],{"class":101}," parsedHTML ",[95,2143,183],{"class":270},[95,2145,279],{"class":270},[95,2147,2148],{"class":109}," Function",[95,2150,345],{"class":101},[95,2152,2153],{"class":270},"...",[95,2155,2156],{"class":101},"Object.",[95,2158,2159],{"class":109},"keys",[95,2161,345],{"class":101},[95,2163,349],{"class":348},[95,2165,2166],{"class":101},".$data), html)(",[95,2168,2153],{"class":270},[95,2170,2156],{"class":101},[95,2172,2173],{"class":109},"values",[95,2175,345],{"class":101},[95,2177,349],{"class":348},[95,2179,2180],{"class":101},".$data));\n",[95,2182,2184,2186,2189,2191],{"class":97,"line":2183},95,[95,2185,1150],{"class":348},[95,2187,2188],{"class":101},".__root.innerHTML ",[95,2190,183],{"class":270},[95,2192,2193],{"class":101}," parsedHTML;\n",[95,2195,2197],{"class":97,"line":2196},96,[95,2198,1909],{"class":101},[95,2200,2202],{"class":97,"line":2201},97,[95,2203,1058],{"emptyLinePlaceholder":1057},[95,2205,2207],{"class":97,"line":2206},98,[95,2208,564],{"class":101},[95,2210,2212],{"class":97,"line":2211},99,[95,2213,1058],{"emptyLinePlaceholder":1057},[95,2215,2217,2219,2221,2223,2225,2227],{"class":97,"line":2216},100,[95,2218,271],{"class":270},[95,2220,274],{"class":101},[95,2222,183],{"class":270},[95,2224,279],{"class":270},[95,2226,1065],{"class":109},[95,2228,285],{"class":101},[95,2230,2232,2234,2237],{"class":97,"line":2231},101,[95,2233,291],{"class":101},[95,2235,2236],{"class":186},"\"#app\"",[95,2238,297],{"class":101},[95,2240,2242],{"class":97,"line":2241},102,[95,2243,303],{"class":101},[95,2245,2247,2249,2252],{"class":97,"line":2246},103,[95,2248,309],{"class":101},[95,2250,2251],{"class":186},"\"1\"",[95,2253,297],{"class":101},[95,2255,2257,2260,2263,2266],{"class":97,"line":2256},104,[95,2258,2259],{"class":101},"            date: ",[95,2261,2262],{"class":270},"new",[95,2264,2265],{"class":109}," Date",[95,2267,2268],{"class":101},"(),\n",[95,2270,2272],{"class":97,"line":2271},105,[95,2273,2274],{"class":101},"            obj: {\n",[95,2276,2278,2281,2284],{"class":97,"line":2277},106,[95,2279,2280],{"class":101},"                a: ",[95,2282,2283],{"class":348},"1",[95,2285,297],{"class":101},[95,2287,2289,2292],{"class":97,"line":2288},107,[95,2290,2291],{"class":101},"                b: ",[95,2293,2294],{"class":348},"11\n",[95,2296,2298],{"class":97,"line":2297},108,[95,2299,719],{"class":101},[95,2301,2303],{"class":97,"line":2302},109,[95,2304,362],{"class":101},[95,2306,2308],{"class":97,"line":2307},110,[95,2309,368],{"class":101},[95,2311,2313],{"class":97,"line":2312},111,[95,2314,1058],{"emptyLinePlaceholder":1057},[95,2316,2318,2320,2322],{"class":97,"line":2317},112,[95,2319,155],{"class":101},[95,2321,232],{"class":105},[95,2323,113],{"class":101},[95,2325,2327,2329,2331],{"class":97,"line":2326},113,[95,2328,155],{"class":101},[95,2330,90],{"class":105},[95,2332,113],{"class":101},[43,2334,2335],{"id":2335},"每日一题",[86,2337,2342],{"className":2338,"code":2340,"language":2341},[2339],"language-text","https:\u002F\u002Fgithub.com\u002FWindrunnerMax\u002FEveryDay\n","text",[17,2343,2340],{"__ignoreMap":91},[43,2345,2346],{"id":2346},"参考",[86,2348,2351],{"className":2349,"code":2350,"language":2341},[2339],"https:\u002F\u002Fwww.jianshu.com\u002Fp\u002F255d4dec710a\nhttps:\u002F\u002Fwww.jianshu.com\u002Fp\u002Fc8186e9e027b\nhttps:\u002F\u002Fwww.cnblogs.com\u002Fwangjiachen666\u002Fp\u002F9883916.html\nhttps:\u002F\u002Fblog.csdn.net\u002Fwangshu696\u002Farticle\u002Fdetails\u002F84570886\nhttps:\u002F\u002Fblog.csdn.net\u002Fqq_43051529\u002Farticle\u002Fdetails\u002F82877673\nhttps:\u002F\u002Fgithub.com\u002Fliutao\u002Fvue2.0-source\u002Fblob\u002Fmaster\u002F%E5%8F%8C%E5%90%91%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A.md\n",[17,2352,2350],{"__ignoreMap":91},[2354,2355,2356],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .snhLl, html code.shiki .snhLl{--shiki-default:#22863A;--shiki-default-font-weight:bold;--shiki-dark:#85E89D;--shiki-dark-font-weight:bold}",{"title":91,"searchDepth":116,"depth":116,"links":2358},[2359,2360,2361,2362,2363],{"id":45,"depth":116,"text":45},{"id":436,"depth":116,"text":436},{"id":883,"depth":116,"text":883},{"id":2335,"depth":116,"text":2335},{"id":2346,"depth":116,"text":2346},"Vue是通过数据劫持的方式来实现数据双向数据绑定的，其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持，该方法允许精确地添加或修改对象的属性，对数据添加属性描述符中的getter与setter实现劫持。","md",{},"\u002Fvue\u002Fvue数据双向绑定",{"title":5,"description":2364},"Vue\u002FVue数据双向绑定","Mqxx25a03BVfWwSSrkO8TzQZ-59Rs-Pg7_tTgA76nGY",1791042470822]