<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        解析vue data不可以使用箭頭函數問題

        來源:懂視網 責編:小采 時間:2020-11-27 22:12:04
        文檔

        解析vue data不可以使用箭頭函數問題

        解析vue data不可以使用箭頭函數問題:首先需要明確,a() {}和 b: () => {}是不同的 let obj = { a() {}, // 相當于 a:function() {}, b: () => {} } 1 VUE.js 源碼解析 注意此處只設計核心代碼 這段代碼也是UMD實現原理,本文這里不是重點,有興趣的可以自行探究。 (functi
        推薦度:
        導讀解析vue data不可以使用箭頭函數問題:首先需要明確,a() {}和 b: () => {}是不同的 let obj = { a() {}, // 相當于 a:function() {}, b: () => {} } 1 VUE.js 源碼解析 注意此處只設計核心代碼 這段代碼也是UMD實現原理,本文這里不是重點,有興趣的可以自行探究。 (functi

        首先需要明確,a() {}和 b: () => {}是不同的

         let obj = {
         a() {},
         // 相當于
         a:function() {},
         b: () => {}
        }

        1 VUE.js 源碼解析

        注意此處只設計核心代碼

        這段代碼也是UMD實現原理,本文這里不是重點,有興趣的可以自行探究。

        (function (global, factory) {
         typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
         typeof define === 'function' && define.amd ? define(factory) :
         (global.Vue = factory());
         }(this, (function (){
         'use strict';
         console.log(this) //*undefined*
         })))

        解析一:

        對于javascript來說,非嚴格模式下函數都會有一個this指向,不清楚的這里有傳送門this指向相關

        說一下本文中涉及的this指向問題,如果不是嚴格模式,this應該指向window,但是由于vue作者使用的是嚴格模式,所以他指向了undefined

        以下是vue中data的實現原理

         (function (global, factory) {
         typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
         typeof define === 'function' && define.amd ? define(factory) :
         (global.Vue = factory());
         }(this, (function (){
         'use strict';
         function getData(data,vm) {
         return data.call(vm, vm)
         }
         function initData(params) {
         data = vm._data = typeof data === 'function'
         ? getData(data, vm)
         : data || {};
         }
         initData() 
         })))

        也就是說每次新創建實例的時候都會去判斷是否有data函數,如果有的話就會將其賦值給vm._data,心細的同學會發現對于Vmm實例來說是沒有data,而是有vm._data

        es5函數和es6箭頭函數

         var obj = {
         a: () => {
         'use strict';
         console.log(this,'a')
         },
         b() {
         console.log(this,'b')
         },
         c() {
         // window
         let e = () => {
         console.log(this,'e')
         }
         return e
         }
         }
         obj.a() // window
         obj.b() // obj
         obj.c()() // obj

        對于普通函數(非嚴格模式下),this指向調用者,es6中的this指向聲明時的上下文環境。

        結合以上兩點解析今天的問題

         (function (global, factory) {
         typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
         typeof define === 'function' && define.amd ? define(factory) :
         (global.Vue = factory());
         }(this, (function (){
         'use strict';
         let vm = {}
         var data = () => {
         console.log(this);//undefined
         return {
         a: 1
         } 
         }
         function getData(data,vm) {
         return data.call(vm, vm)
         }
         function initData(params) {
         data = vm._data = typeof data === 'function'
         ? getData(data, vm)
         : data || {};
         }
         initData()
         console.log(vm);
         }))) 

        以上代碼說明你使用箭頭函數給data: () => {} this指向undefined的時候,是會賦值給vm._data,但是他會相當于一個全局的,只要你不刷新頁面他就會緩存你的data。

        如果我們使用data() {}this指向Vm實例,所以他會隨著實例更新。

        總結

        以上所述是小編給大家介紹的vue data不可以使用箭頭函數問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        解析vue data不可以使用箭頭函數問題

        解析vue data不可以使用箭頭函數問題:首先需要明確,a() {}和 b: () => {}是不同的 let obj = { a() {}, // 相當于 a:function() {}, b: () => {} } 1 VUE.js 源碼解析 注意此處只設計核心代碼 這段代碼也是UMD實現原理,本文這里不是重點,有興趣的可以自行探究。 (functi
        推薦度:
        標簽: VUE 解析 箭頭函數
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩av无码免费播放| japanese色国产在线看免费| 日韩精品免费一级视频| 亚洲AV中文无码字幕色三| 久久久久成人片免费观看蜜芽| 狠狠色伊人亚洲综合成人| 精品在线免费观看| 亚洲AV永久无码精品一百度影院| 免费看又黄又无码的网站| 91亚洲精品视频| 成人免费无码视频在线网站| 亚洲一区二区无码偷拍| 亚洲成AV人片一区二区密柚| 亚洲精品偷拍视频免费观看| 久久青草亚洲AV无码麻豆| 最近中文字幕完整免费视频ww| 亚洲一区二区三区亚瑟 | 久久99毛片免费观看不卡| 亚洲国产精品婷婷久久| 18勿入网站免费永久| 99亚洲精品卡2卡三卡4卡2卡| 亚洲VA综合VA国产产VA中| 波多野结衣免费一区视频| 亚洲美女aⅴ久久久91| 国产高清免费观看| 99re6在线视频精品免费| 久久亚洲AV成人出白浆无码国产| 成人午夜视频免费| 毛片基地看看成人免费| 亚洲天堂一区二区三区| 亚洲第一黄色网址| 青青草无码免费一二三区| 亚洲国产精品无码第一区二区三区| 亚洲精品无码你懂的网站| 99久久综合精品免费| 亚洲狠狠婷婷综合久久| 久久精品国产亚洲av麻| 国产成人免费手机在线观看视频 | 亚洲综合一区无码精品| 亚洲五月午夜免费在线视频| 最近中文字幕大全中文字幕免费|