当前位置: 首页 > Web前端 > HTML5

(下篇)仿‘Vue生态’系列___‘模板小故事’

时间:2023-04-04 23:41:53 HTML5

锛堜笅锛夋ā浠裤€奦ue鐢熸€併€嬬郴鍒梍__銆婃ā鏉挎晠浜嬨€嬨€傛浠诲姟缁х画锛氬畬鎴愮涓€涓湭瀹屾垚鐨勨€滅儹鏇存柊鈥濋厤缃€傛牳蹇冿細瀹屾垚'妯℃澘鍒嗘瀽'妯″潡鐨勭浉鍏冲啓浣滐紝寰堝鏂囩珷瀵规ā鏉跨殑鍒嗘瀽璁茶В鐨勫お娴呫€傝繖涓€娆★紝璁╂垜浠竴璧锋繁鍏ヨ璁猴紝灏藉彲鑳藉鍦拌瘑鍒敤鎴疯鍙ャ€傚惎钂欙細鍦ㄧ粨鏋勪笂锛屾湁鈥樺弻鍚戠粦瀹氣€欍€亀atch銆乨ep绛夋ā鍧楃殑缂栧啓鍩虹銆傛渶缁堟晥鏋滃浘1.鏃㈢劧瑕佸紑鍙憁vvm妯℃澘椤甸潰锛屽綋鐒惰妯℃嫙鐪熷疄鐨勪娇鐢ㄥ満鏅€傛垜浠妸鐩稿叧鏂囦欢鏀惧湪'cc_vue/use'璺緞涓嬶紝浠g爜濡備笅锛?cc_vue/use'/1:Templateanalysis/index.html'锛屾湰鏂囦笓闂ㄥ睍绀烘ā鏉垮垎鏋愰〉闈?cc_vue/use/1:Templateanalysis/index.js'锛屾湰鏂囦笓闂ㄥ睍绀烘ā鏉垮垎鏋恏tml鏂囦欢淇℃伅鐨勯€昏緫浠g爜锛屼絾鏄唴瀹瑰啑闀匡紝姣棤鎶€鏈彲瑷€锛岃繖閲屽氨涓嶅睍绀轰簡銆俧unctioninit(){newC({el:'#app',data:{title:'濂藉ソ瀛︿範',ary:[1,2,3],obj:{name:'閲戞瘺',type:['绔ュ勾','鎴愮啛','鍏ㄨ韩']},fn(){return'澶у濂斤紝杩欐槸锛?+this.obj.name;}}});}exportdefaultinit;1銆侀厤缃枃浠跺拰绠€鍗曠殑鐑洿鏂颁箣鎵€浠ョ畝鍗曪紝鏄洜涓烘垜浠笉浼氬仛鐨勫緢璇︾粏锛屾瘮濡傝繖娆℃垜浠笉浼氳拷姹傛瘡娆¢兘绮剧‘鏇存柊锛岃€屾槸姣忔閮芥洿鏂版暣浣撱€傛瘯绔熻繖涓伐绋嬬儹鏇存柊鍙槸涓€涓煡璇嗙偣锛屾垜浠繕鏈夊緢澶氬緢澶氭洿閲嶈鐨勪簨鎯呰鍋歟mmmmm涓€浜涜嚜宸辫鐐圭殑鐑洿鏂颁笉鏄緢閲嶈鐗涢€硷紝鎴戜箣鍓嶉厤缃簡vuex鐨勭儹鏇存柊锛岀劧鍚庢€荤粨瀹冧簡銆傚畠绫讳技浜庡洖璋冨嚱鏁扮殑姒傚康銆傚師鐞嗘槸褰揺ditor鎴栬€卻erve妫€娴嬪埌浣犵殑鏂囦欢鍙戠敓鍙樺寲鏃讹紝鎵ц涓€涓洖璋冨嚱鏁般€傝繖涓洖璋冨嚱鏁伴噷闈㈠寘鍚簡涓€浜涢噸鏂版覆鏌撱€佹洿鏂癲om绛夋搷浣滐紝澶у鍙兘浼氭湁鐤戞儜銆倂ue鐨勭儹鏇存柊杩欎箞濂斤紝灞呯劧娌℃湁鐑洿鏂扮殑鍥炶皟鍑芥暟銆傚叾瀹炶繖閮芥槸'vue-loader'鐨勫姛鍔筹紝css鐑洿鏂版祴璇曟槸css-loader,浠栦滑鍦ㄦ枃浠跺鐞嗛樁娈靛皢鐑洿鏂板洖璋冧唬鐮佹敞鍏ュ埌js鏂囦欢涓紝鎵€浠ユ垜浠槸楹绘湪涓嶄粊鐨勶紝鎵€浠ユ病鏈?loader'甯垜浠敞鍏ョ儹鏇存柊锛屾墍浠ヨ繖娆℃垜浠墜鍔ㄥ疄鐜般€傪煇呮湁鍏磋叮鐨勫悓瀛﹀彲浠ュ幓瀹樼綉鐨勬暀绋嬶紝涓€涓畝鐭殑閰嶇疆鏂囦欢锛屽垎涓虹敓浜х幆澧冨拰寮€鍙戠幆澧冿紙铏界劧鎴戜滑鐢熶骇涓嶉渶瑕侊紝浣嗘槸鐢ㄦ潵瀛︿範杩樻槸涓嶉敊鐨勶級锛沚uild---productionpackagingcommon---commonpackagedev---developmentpackagecommon.jsconstdev=require('./dev');constpath=require('path');constbuild=require('./build');constmerge=require('webpack-merge');constcommon={entry:{main:'./src/index.js'},output:{filename:'[name].js',path:path.resolve(__dirname,'../dist')},妯″潡锛歿瑙勫垯锛歔{娴嬭瘯锛?.css$/锛屼娇鐢細['style-loader'锛?css-loader'锛?postcss-loader']}锛寋娴嬭瘯锛?.js$/锛屾帓闄わ細/node_modules/,loader:'babel-loader?cacheDirectory=true'}]}};module.exports=env=>{letconfig=env=='dev'?寮€鍙戯細鏋勫缓锛涜繑鍥炲悎骞讹紙閫氱敤锛岄厤缃級锛泒锛涙湁merge鐭ヨ瘑鐨勯厤缃繃webpack鐨勫悓瀛﹂兘鐭ラ亾锛宮erge鏄湁鐏甸瓊鐨勩€傚熀鏈笂姣忎釜椤圭洰閮戒細鏈夊绉嶇被鍨嬬殑鎵撳寘锛岄厤缃枃浠舵洿鏄暟涓嶈儨鏁帮紝鎶婅繖浜涢厤缃暣鍚堣捣鏉ュ苟涓嶅鏄擄紝鎵€浠ユ垜浠潵鐪嬬湅webpack-merge鐨勬晥鏋溿€俷pmiwebpack-merge-D鎴戜滑杩涜濡備笅瀹為獙letobj1={a:1,b:[1],c:{鍚嶇О:1}};璁﹐bj2={a:2,b:[2],c:{age:2}};merge(obj1,obj2)缁撴灉鏄細{a:2,b:[1,2],c:{name:1,age:2}};鍦ㄦ垬鐣ヤ笂锛屽悗鑰呭噷椹句簬鍓嶈€呬箣涓娿€傞亣鍒版櫘閫氬€硷紝鐩存帴瑕嗙洊銆傞亣鍒版暟缁勶紝浼氱敤鍒皃ush()銆傚綋閬囧埌涓€涓璞℃椂锛屽畠浼氶€夋嫨瑕嗙洊鍘熸潵鐨勫睘鎬э紝鎴栬€呭鏋滄病鏈夊師鏉ョ殑灞炴€у氨娣诲姞涓€涓柊鐨勩€傝繖鍏跺疄寰堟湁瓒c€傛垜鍙互鍦ㄥ叾浠栧湴鏂逛娇鐢ㄨ繖涓柟娉曪紝涓嶅眬闄愪簬webpack閰嶇疆锛屽涔犲拰浣跨敤瀹冨緢鏈夎叮馃銆傝繖娆¤В閲婁竴涓嬬敤娉?/瀵煎嚭涓€涓嚱鏁帮紝鍙湁鍑芥暟鎵嶈兘鎺ユ敹浼犻€掕繃鏉ョ殑鍙傛暟銆俶odule.exports=env=>{//鐩存帴鍒ゆ柇鍙傛暟鐨勭被鍨嬫潵鍐冲畾浣跨敤鍝竴缁勯厤缃紱璁ヽonfig=env=='dev'锛熷紑鍙戯細鏋勫缓锛?/灏嗛厤缃笌閫氱敤鍩虹閰嶇疆鏁村悎骞跺鍑簉eturnmerge(common,config);};鍚姩鍛戒护鐨勮皟鏁?-hotstartuphotUpdate锛屽鏋滃啓鍦ㄩ厤缃枃浠朵腑锛岃繖鍙ヨ瘽鍙互涓嶅姞銆?-envdev閰嶇疆浼犲叆鐨勫弬鏁板瓧绗︿覆'dev'锛屽繀椤诲啓鍦ㄨ繖閲?-env.--config./config/common.js鎸囧畾闇€瑕佽皟鐢ㄧ殑閰嶇疆鏂囦欢涓?/config/common.js浠f浛webpack.config.js."serve":"webpack-dev-server--hot--envdev--config./config/common.js",鐑洿鏂颁娇鐢╟c_vue/config/dev.jsconstpath=require('璺緞');constWebpack=require('webpack');constHtmlWebpackPlugin=require('html-webpack-plugin');module.exports={mode:'development',devtool:'source-map',devServer:{port:9999,hot:true,//杩欓噷蹇呴』寮€鍚?/hot鍜宧otOnly鐨勫尯鍒槸褰撴煇浜涙ā鍧椾笉鏀寔鐑洿鏂版椂锛屽墠鑰呬細鑷姩鍒锋柊椤甸潰锛屽悗鑰呬笉浼氬埛鏂伴〉闈紝浣嗗湪Console杈撳嚭鐑洿鏂板け璐,plugins:[//鐩稿叧鎻掍欢涔熼渶瑕佸姞杞絥ewWebpack.HotModuleReplacementPlugin(),newHtmlWebpackPlugin({filename:'index.html',template:path.resolve(__dirname,'../use/1:妯℃澘瑙f瀽/index.html'),})]};鎺ヤ笅鏉ュ啓浠g爜锛屾垜浠鐢ㄥ埌鐑洿鏂版ā鍧?.鍐欐牳蹇僀绫籧c_vue/src/index.jsimport'../public/css/index.css';importCompilerfrom'./Compiler.js';//鍏跺疄杩欎釜绫荤殑鍔熻兘寰堢畝鍗?/鍦╲ue鐨勬簮鐮佷腑锛岃繖涓被鍙垽鏂敤鎴锋槸鍚︿娇鐢╪ew锛屽悓鏃惰皟鐢╥nitclassC{constructor(options){//杩欓噷锛屾垜浠笉'绠$敤鎴蜂紶浠€涔堬紝鎴戜滑鐩存帴鍏ㄩ儴鎸傚湪鑷繁韬笂锛屽姞涓?绗﹀彿琛ㄧず銆俧or(letkeyinoptions){this['$'+key]=options[key];}//杩欓噷鎴戜滑瀹炰緥鍖栦簡妯℃澘鐨勭被锛?/杩欐槸鏈湡鐨勪富棰橈紝妯℃澘鐩稿叧鍒嗘瀽newCompiler(this.$el,this);}}//姣旇緝浼犵粺鐨勫啓娉曪紝鎸傚湪Globally涓婏紝鍏跺疄鎵€鏈夌殑鎿嶄綔閮藉彧鏄妸杩欎釜鍙橀噺鏆撮湶缁欑敤鎴凤紱绐楀彛.C=C;寮曞叆鐑洿鏂板彧鏄竴涓緥瀛愶紝杩欐涓嶄細浣跨敤importinitfrom'../use/1:templateanalysis/index';...window.C=C;//鎵ц鍒濆鍖栵紝浠g爜宸茬粡pasted.init();//褰撴湁鐑洿鏂版椂if(module.hot){//鐩戝惉杩欎釜鏂囦欢鐨勫彉鍖杕odule.hot.accept('../use/1:templateparsing/index.js',function(){//鏀瑰彉鍚庡仛浠€涔坕nit();});}杩欐娌℃湁鐢ㄥ埌鐨勫師鍥犳槸椤圭洰鍒氬紑濮嬶紝娌℃湁update鏂规硶锛屽嵆浣挎娴嬪埌鏂囦欢鍙樺寲涔熸病鐢紝姣斿鐢ㄦ埛杈撳叆{{a}}锛屽凡缁忚浆鎹负a瀵瑰簲鐨勫彉閲忋€傝繖涓椂鍊欏鏋滆鏇存柊杩欎釜鍊硷紝灏遍渶瑕佽Е鍙戝畠鑷繁鐨剈pdater鏂规硶锛屼絾鏄繖涓柟娉曟垜浠繕娌℃湁鍐欙紝鎵€浠ヨ繖娆′笉浼氱敤鍒帮紝鐩存帴浣跨敤鍒锋柊鏇存柊鍗冲彲锛屽皢鏉ユ偍灏嗘洿鏂扮壒瀹氭ā鍧椼€?.妯℃澘瑙f瀽妯″潡cc_vue/src/Compiler.js//瑙f瀽妯℃澘绯诲垪classCompiler{//褰撲綘涓嶇粰#app鐨勬椂鍊欙紝鎴戠粰浣犱竴涓粯璁ょ殑#app//鍥犱负杩欎釜椤圭洰涓嶆秹鍙婏紝'寤惰繜mounting'鎵€浠ヤ綘鍙互杩欐牱鍐?/vue灏嗘秹鍙婂欢杩熷畨瑁卌onstructor(el='#app',vm){this.铏氭嫙鏈?铏氭嫙鏈猴紱//1:濡傛灉鏄痙om锛岀洿鎺ヤ娇鐢?/濡傛灉鏄瓧绗︿覆锛岃幏鍙杢his.el=this.isElementNode(el)?el:鏂囨。.querySelector(el);//2:鍒朵綔鏂囨。鐗囨letfragment=this.node2fragment(this.el);//3:瑙f瀽鍏冪礌锛屾枃妗f祦涔熸槸涓€涓璞?/缂栬瘧瑙f瀽鐨勬牳蹇冧唬鐮侊紝杩欎釜閫昏緫涓嬮潰浼氳鍒皌his.compile(fragment);//鏈€鍚庝竴姝ワ細瀹屾垚澶勭悊鐒跺悗灏嗗叾鎻掑洖this.el.appendChild(fragment);}/***@method鍒ゆ柇鏄惁涓哄厓绱犺妭鐐?@param{node}寰呭垽鏂妭鐐?@return{boolean}鏄惁涓哄厓绱犺妭鐐癸紝鍏冪礌鑺傜偣1*/isElementNode(node){returnnode.鑺傜偣绫诲瀷===1;}/***@method鍒ゆ柇鏄惁涓烘枃鏈妭鐐?@param{node}瑕佸垽鏂殑鑺傜偣*@return{boolean}鏄惁涓烘爣绛捐妭鐐癸紝鏂囨湰鑺傜偣涓?*/isTextNode(node){杩斿洖node.nodeType===3;}/***@method灏嗘墍鏈夎妭鐐规斁鍏ユ枃妗f祦涓?@param{node}瑕侀亶鍘嗙殑鑺傜偣瀵硅薄*@return{fragment}杩斿洖鐢熸垚鐨勬枃妗f祦*/node2fragment(node){//鍒涘缓鏂囨。娴佽fragment=document.createDocumentFragment();while(node.firstChild){//鎻掑叆鏂囨。娴乫ragment.appendChild(node.firstChild);}杩斿洖鐗囨锛泒}exportdefaultCompiler;compile杩欎釜鏂规硶鏈€閲嶈锛屼笅闈㈣璇磒ipe瀹炰緥涓轰粈涔堝彨'vm'鐨勭煡璇嗙偣锛屾憳鑷獀ue瀹樼綉锛堣櫧鐒秜ue娌℃湁瀹屽叏閬靛惊MVVM妯″瀷锛屼絾鏄璁ue涔熷彈鍒板畠鐨勫惎鍙戙€傚洜姝ゆ枃妗d腑缁忓父浣跨敤鍙橀噺鍚峷m锛圴iewModel鐨勭缉鍐欙級鏉ヨ〃绀篤ue瀹炰緥锛塶odeType锛屾瘡涓妭鐐归兘鏈夊搴旂殑绫诲瀷锛?/鍏冪礌鑺傜偣锛?//灞炴€ц妭鐐?2//鏂囨湰鑺傜偣,3//璇勮鑺傜偣,8杩欎釜涔熷緢鏈夌敤//document,9//DocumentFragment11createDocumentFragment()鏂规硶锛屾垜涓€鑸彨瀹冨垱寤烘枃妗f祦鐗囨锛屼紬鎵€鍛ㄧ煡鎿嶄綔dom寮€閿€寰堝ぇ锛岃€屽鏋滈渶瑕佹彃鍏?0000涓猟om锛岄偅灏辩湡鐨刧g浜嗭紝涓嶈繃鍒嗙墖闂鍙互杞绘澗瑙e喅銆傛槸铏氱殑锛屼絾鏄彲浠ュ儚鍏冪礌涓€鏍锋搷浣滐紝鎵€浠ュ彲浠ュ厛鎶婂厓绱犳斁鍦ㄩ噷闈紝鍐嶆斁鍒扮洰鏍噋arent涓氨鍙互浜嗭紝鎵€浠ュ彧闇€瑕佹彃鍏ヤ竴娆★紝涓嶄細褰㈡垚鍏冪礌鍦ㄩ〉闈笂銆侼ode.prototype涓婄殑appendChild鍜宎ppendappendChildappend涓婄殑Document.prototype閮借〃绀哄厓绱犳渶鍚庢坊鍔犵殑鏁板瓧涓嶆敮鎸佷紶鍏ュ瓧绗︿覆鐢熸垚鏍囩锛屾瘮濡?

  • 1
  • ',append()鍙互鍚屾椂浼犲叆澶氫釜鑺傜偣鎴栧瓧绗︿覆锛屾病鏈夎繑鍥炲€硷紱appendChild()鍙兘浼犲叆涓€涓妭鐐癸紝涓€涓瓧绗︿覆浼氭姤閿欙紱闄ら潪鍦╠ocument.createTextElement('string')涓紶鍏?.澶勭悊鑺辨嫭鍙峰浜巚ue鏉ヨ鏄潪甯稿鏉傜殑銆傛垜鎯冲湪杩欎釜缁冧範涓洿澶氬湴閿荤偧鑷繁鐨勬€濈淮锛屾墍浠ユ垜閫夋嫨浜嗚嚜宸辩殑鏂瑰紡鏉ュ仛锛?..compile(node){letchildNodes=node.childNodes;[...childNodes].map(child=>{if(this.isElementNode(child)){//鍏冪礌鑺傜偣澶勭悊鎸囦护this.compileElement(child);this.compile(child);}elseif(this.isTextNode(child)){//鏂囨湰鑺傜偣澶勭悊{{}}this.compileText(child);}});}鏈枃鍙叧娉ㄦ枃鏈妭鐐圭殑澶勭悊锛屾帴涓嬫潵灏辨槸compileText鐨勬€濊矾/***@methodprocessingtextnodes*@param{node}浣犺閬嶅巻鐨勮妭鐐瑰璞?/compileText(node){璁╁唴瀹?node.textContent;//鍙鐞嗚姳鎷彿锛屽鏋滄病鏈夎姳鎷彿锛屽氨绠椾簡if(/\{\{.+?\}\}/.test(content)){CompileUtil.text(node,content,this.铏氭嫙鏈猴級锛泒}鍥犱负浼氭湁寰堝宸ュ叿绫伙紝鎴戜滑鎵撳紑涓€涓枃浠禼c_vue/src/CompileUtil.jsCompileUtil.textconstCompileUtil={text(node,expr,vm){letcontent=expr.replace(/\{\{(.+?)\}\}/g,($0,$1)=>{//鏇挎崲姣忎竴涓尮閰嶅埌鎷彿涓殑鑺辩殑鍐呭锛屼氦缁欒繖涓嚱鏁拌幏鍙栧€硷紱杩斿洖nthis.getVal(vm,$1);});this.updater.textUpdater锛堣妭鐐癸紝鍐呭锛夛紱}//...updater:{textUpdater(node,value){node.textContent=value;}}};瀵煎嚭榛樿CompileUtil锛?.鑾峰彇瀵瑰簲鐨勫€硷紙鏈€鏈夋剰鎬濈殑鏄粬馃榿锛塯etVal鍑芥暟鏈€鏈夋剰鎬濄€傜湅杩囧緢澶氱増鏈紝鏈€鍚庝粙缁嶄笅鎴戠爺绌剁殑閭d釜鐗堟湰銆傘€傘€傚ぇ瀹剁瑧浜嗙涓€涓猧dea锛岀綉涓婃渶甯歌鐨勶紙鍙鐞嗕竴绉嶆儏鍐碉紝鍙鐞嗕竴涓骇鍒煠封€嶏笍绾补蹇芥偁浜虹浉褰撲簬娆鸿瘓锛夊彧鑳藉鐞唟{a.b}}鎴杮{a}}//鏄竴涓緥瀛恎etVal(){letstr='a.c';letdata={a:{c:2}}//绠€鍗曞湴鏍规嵁'.'鍒嗗壊str=str.split('.');璁╃粨鏋?鏁版嵁锛泂tr.map(item=>{//姣忔鍙栦竴涓€紃esult=result[item]})returnresult}涓婇潰杩欎釜鏂规硶涔嶄竴鐪嬪ソ鍍忔病鎯冲ソ锛岄殢渚垮鐞嗕竴涓?...a['b']鐨勫€兼槸涓嶅彲鑳藉緱鍒扮殑锛屽鏋滈噷闈㈡湁a['b']+a['c']鐨勬搷浣滐紝鏇村埆鎻愪竴涓嚱鏁颁簡銆傘€傘€傜湅浜嗗緢澶氭枃绔狅紝鐪嬪埌浜嗘€濊矾2鐨勬柟娉曟€濊矾2锛屽鐞嗕袱涓彇鍊兼柟娉曪紝鍒嗗埆澶勭悊鎿嶄綔绗etVal(){//鎸洪夯鐑︾殑锛岃璇存€濊矾鍚э紝姣曠珶涓嶆槸鎴戝啓鐨剗浣跨敤鎸囬拡閫愪釜妫€鏌ュ瓧绗︿覆鐨勬瘡涓瓧绗︺€傚綋閬囧埌'['鏃讹紝灏嗗叾鍒嗗紑鍙栧嚭锛岃繘琛?鎬濇兂1'鐨勬搷浣滐紝鐩村埌閬囧埌']'銆傞亣鍒版暟瀛楅渶瑕佺壒娈婂鐞嗭紝姣斿a[1]锛屼笉鑳藉鐞嗘垚a[data.1]銆傚綋閬囧埌'''鎴?"'闇€瑕佺壒娈婂鐞嗘椂a['b']杩欎釜b涓嶈兘浣滀负data.b澶勭悊銆傚弽澶嶉噸澶嶄笂闈㈢殑鎿嶄綔锛屾妸鍘熸潵鐨勫瓧绗︿覆杞垚'.'鐨勫舰寮忛摼鎺ワ紝鎸夌収idea1鐨勬柟寮忚繘琛屽彇鍊笺€俷oIknowwhatIthink...涔嶄竴鐪嬩笉鏄纭殑鏂瑰紡锛屼唬鐮佸お绻佺悙锛屽垽鏂お澶氾紝浣嗗苟娌℃湁娑电洊鎵€鏈夌殑鎯呭喌銆傚嚭鏉ュ惂锛屽仛杩欑浜嬫儏鐨勪汉鏄敤鑴戝瓙鐨勩€傛€濊矾涓夛紝涓€寮€濮嬪叾瀹炴槸鎯崇敤with鍏抽敭瀛楁潵瀹炵幇eval鐨勶紝浣嗘槸涓嶄娇鐢ㄦ€ц兘澶樊浜嗐€傚畠姣旀甯哥紪鍐欎唬鐮佹參20-30鍊嶃€備弗鏍兼ā寮忎笉鍏佽馃槩鐭ヨ瘑鐐箇ithletobj={}obj.a=2;obj.b=3letobj={}with(obj){a=2;b=3;}鎬濊矾鏄敤鎴峰啓鍦▄{}}璇彞涓笉鍐檛his锛屼絾鏄寚鍚憈his锛屾墍浠ユ兂鍦ㄥご閮ㄧ粰浠栦滑鍔犱笂杩欎釜鍓嶇紑銆傚惊鐜彇鍑哄彉閲忓苟灏嗗叾鎷兼帴鍦ㄥご閮ㄣ€傝繖涔熷お馃槗浜嗐€傘€傘€傚垱寤轰竴涓幆澧冿紝杩欎釜鐜閲岀殑鍙橀噺閮藉湪杩欎笂闈€備篃灏辨槸鎴戞妸this.$data閲岄潰鐨勫€硷紙澶氬啓鍑犵瘒灏变細鍙橈級鍏ㄩ儴鏀惧埌鎴戠幇鍦ㄧ殑鐜涓€傛瘮濡倀his.a=1锛岄偅鎴戠洿鎺ara=this.a鍦ㄥ嚱鏁扮殑鍏朵粬鍦版柟璋冪敤a鐩稿綋浜庤皟鐢╰his.agetVal(vm,expression){letresult,__whoToVar='';//寰幆data涓婄殑姣忎竴涓睘鎬or(letiinvm.$data){//涓嬩竴鏉ata浼氬仛鎴愪唬鐞嗭紝prototype涓婄殑灞炴€т細琚Щ闄etitem=vm.$data[i];//鍑芥暟姣旇緝鐗规畩锛屽洜涓洪渶瑕佹敼鍙樺0鏄庢柟寮?/鍏煎浼犲弬//鍥哄畾this鎸囧悜vm瀹炰緥if(typeofitem==='function'){__whoToVar+=`function${i}(...arg){杩斿洖vm.$data['${i}']銆傝皟鐢紙vm.$data锛?..arg锛墋`锛泒else{//鏅€氬彉閲忕洿鎺et__whoToVar+=`let${i}=vm.$data['${i}'];`;}}//鎵ц缁撴灉鐢眗esult__whoToVar=`${__whoToVar}result=${expression}`璁块棶锛涜瘎浼帮紙__whoToVar锛夛紱杩斿洖缁撴灉锛泒锛屼笂闈㈢殑鏂规硶灏辨悶瀹氫簡锛屽氨鍙互杈惧埌绗竴涓晥鏋滃浘鎵€绀虹殑鐩殑銆傚啓瀹屾枃绔犵湡鏄崱姝讳簡銆備互鍚庤鎺у埗鏂囩珷鐨勫瓧鏁帮紝璇惰銆備笅涓€绔犳瘮杈冩湁鎰忔€濓紝鍙屽悜缁戝畾鐨勫啓娉曪紝鎴戝緢鍠滄銆傚ぇ瀹跺彲浠ヤ竴璧蜂氦娴侊紝涓€璧峰涔狅紝涓€璧疯繘姝ワ紝鏃╂棩瀹炵幇鑷垜浠峰€硷紒锛?/p>