为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript之实现一个简单的Vue

标签:
AngularJS

JavaScript之实现一个简单的Vue

无鳍的鱼0人评论98人阅读2018-09-18 13:21:21

vue的使用相信大家都很熟练了,使用起来简单。但是大部分人不知道其内部的原理是怎么样的,今天我们就来一起实现一个简单的vue。

Object.defineProperty()

实现之前我们得先看一下Object.defineProperty的实现,因为vue主要是通过数据劫持来实现的,通过get、set来完成数据的读取和更新。


var obj = {name:'wclimb'}

var age = 24

Object.defineProperty(obj,'age',{

    enumerable: true, // 可枚举

    configurable: false, // 不能再define

    get () {

        return age

    },

    set (newVal) {

        console.log('我改变了',age +' -> '+newVal);

        age = newVal

    }

})

 

> obj.age

> 24

 

> obj.age = 25;

> 我改变了 24 -> 25

> 25

从上面可以看到通过get获取数据,通过set监听到数据变化执行相应操作,还是不明白的话可以去看看Object.defineProperty文档。

流程图

html代码结构

1

2

3

4

5

6

7

<div id="wrap">

    <p v-html="test"></p>

    <input type="text" v-model="form">

    <input type="text" v-model="form">

    <button @click="changeValue">改变值</button>

    {{form}}

</div>

js调用

JavaScript

1

2

3

4

5

6

7

8

9

10

11

12

13

    new Vue({

        el: '#wrap',

        data:{

            form: '这是form的值',

            test: '<strong>我是粗体</strong>',

        },

        methods:{

            changeValue(){

                console.log(this.form)

                this.form = '值被我改变了,气不气?'

            }

        }

    })

Vue结构

1

2

3

4

5

6

7

8

9

10

11

    class Vue{

        constructor(){}

        proxyData(){}

        observer(){}

        compile(){}

        compileText(){}

    }

    class Watcher{

        constructor(){}

        update(){}

    }

Vue constructor 构造函数主要是数据的初始化

proxyData 数据代理

observer 劫持监听所有数据

compile 解析dom

compileText 解析dom里处理纯双花括号的操作

Watcher 更新视图操作

©著作权归作者所有:来自51CTO博客作者无鳍的鱼的原创作品,如需转载,请注明出处,否则将追究法律责任

J


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消