Vue原理-笔记

Object.defineproperty - (Vue的原理)

例1:

const obj = {}
        Object.defineProperty(obj, 'x', {
            value:21,
            writable:false //不能被改变
        })

结果:

> obj
< {x: 21}
> obj.x =24
< 24
> obj
> {x: 21}

例2:

//事先定义一个对象
const obj = {}
//定义一个中间值,用于过渡
        let y = 20
        //使用Object.defineProperty来为obj定义一个x的值
        Object.defineProperty(obj, 'x', {
            //当每次调用 obj.x 这个get方法会自动执行,它的return值就是上面定义的y
            get () {    //获取时走的方式
                return y
            },
            //当每次使用obj.x = 某个值 来赋值的时候 这个set方法会自动执行,set方法的参数就是你的那个'某个值'
            set (newValue) { //赋值时走的地方
                console.log(newValue);
                //把新值赋给y,那么下次在执行obj.x取出来的值就是新值
                y = newValue;
            }
        })

结果

> obj.x
< 20
> obj.x = 24
  24
< 24

特性检测:

> 'borderRadius' in document.createElement('div').style;
< true
> 'placeholder' in document.createElement('input');
< true

Proxy

//设置初始值方便理解
let x = 10;
    //使用Proxy来定义一个对象,对象可为空
    const obj = new Proxy({ x },{
        //当每次使用obj.x = 某个值 来赋值的时候 这个set方法会自动执行,set方法的参数就是 "{ x }, x, 某个值"
        set (obj, prop, value) { //obj就是 { x }
            obj[prop] = value; 
        },
        //当每次使用obj.x时这个get方法会自动执行,get方法的参数就是 "{ x }, x"
        get (obj, prop) {
            return obj[prop]  //返回obj[prop]的value值
        }
    })
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 来自深入理解ES6第十二章,由于最近业务中经常用到,记录一下 这里内容都太学术了,有一篇简单介绍Proxy作用的文...
    NowhereToRun阅读 1,043评论 0 1
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,079评论 0 29
  • 面试官: 实现双向绑定Proxy比defineproperty优劣如何? 面试官系列(4): 实现双向绑定Prox...
    流动码文阅读 23,097评论 6 77
  • VUE介绍 Vue的特点构建用户界面,只关注View层简单易学,简洁、轻量、快速渐进式框架 框架VS库库,是一封装...
    多多酱_DuoDuo_阅读 2,742评论 1 17
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,973评论 1 4