发表于: 2019-12-24 17:00:54

1 1276


今日完成的事

学习了defineProperty这个方法,

defineProperty 接收三个参数
  • object (必须有 操作的对象本身 这个很容易理解不传它操作谁?)
  • propertyname (必须有 属性名 添加修改属性得有属性名)
  • descriptor (必须有 官方说的我理解不了,我理解的是 属性描述
    1、简单点就是 设置属性的值value,
    2、是否可操作属性值 writable,
    3、是否可修改配置configurable如果值为false descriptor内的属性都不可操作
    4、是否可枚举enumerable

    *descriptor内配置可有可无,value默认undefind,其余默认为false
属性描述符

通过Object.defineProperty()为对象定义属性,有两种形式,且不能混合使用,分别为数据描述符,存取描述符,下面分别描述下两者的区别:

数据描述符 --特有的两个属性(value,writable)
存取描述符 --是由一对 getter、setter 函数功能来描述的属性

get:一个给属性提供getter的方法,如果没有getter则为undefined。该方法返回值被用作属性值。默认为undefined
set:一个给属性提供setter的方法,如果没有setter则为undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认值为undefined

数据描述符和存取描述均具有以下描述符
  1. configrable   描述属性是否配置,以及可否删除
  2. enumerable  描述属性是否会出现在for in 或者 Object.keys()的遍历中
configrable 代码片段分析
学习了vue的双向数据绑定的原理,vue的双向数据绑定就是运用的defineProperty
首先建立一个更新视图的方法,在建立一个监视数据的系统

首先把数据放入监视数据的这个函数里面,这个函数首先判断数据是不是对象,如果是对象就遍历这个对象的属性然后放入到descriptor里面,当数据改变时触发descriptor的set方法进而改变视图。

如果数据是数组的话还需要重写数组的方法,首先克隆数组的原型,然后用继承的方法Object.create()把克隆的数组原型方法赋值给一个变量

然后把需要重写的数组方法放入到一个数组里面然后遍历它然让继承数组方法的变量重写。


返回列表 返回列表
评论

    分享到