defineProperty
Object提供的方法,用于给对象添加自定义属性具体用法如下:
const obj = { _value: 1 }; Object.defineProperty(obj, 'value', { get: function() { console.log('get方法执行'); return this._value; }, set: function(a) { console.log('set方法执行'); this._value = a; } }) obj.value = 3; console.log(obj.value); console.log(obj._value);
在node中执行结果如下:
下面来分析一下代码
首先定一个对象,并对对象添加一个自定义属性value,同时添加了getter,setter两个函数用来分别控制value属性的修改和获取,
当执行obj.value = 3;
时,会自动调属性的setter方法,将value的修改同步到_value属性上,当执行obj.value
语句获取属性值时,会自动调用getter方法获取方法的返回值;
总结 (参考MDN)
该方法接收三个参数
obj:要添加属性的对象
prop: 要定义的属性
descriptor:要定义或者修改的属性描述符
其中描述符包含以下几种
1.configurable:布尔值,控制属性是否能改变(除了value,writable)及删除
2.enumerable: 布尔值,控制属性是否可枚举,即通过for in循环或者Object.keys访问
3.value:属性值,可以时任何有效JavaScript值
4.writable 布尔值,属性可否通过赋值修改
5.get:属性getter函数,执行时传入this,this值取决于调用者
6.set:属性setter函数,赋值时执行,并传入this
双向绑定
由此可以设计一下数据双向绑定的简单实现:
在数据对象内定义属性,通过对dom绑定事件监听dom内值的变化,并赋值给数据对象,数据对象的改动会调用自身的setter方法,在方法内在动态修改dom内容。
代码如下:
<!-- 简单数据双向绑定实现 --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <div id="root"> <button id='btn'>请求数据</button> </div> </body> <script> const root = document.getElementById('root'); const btn = document.getElementById('btn'); const input = document.createElement('input'); const model = document.createElement('p'); const dataModel = { _value:0, } Object.defineProperty(dataModel, 'value', { configurable: true, set:function(value){ this._value = value; input.value = value; model.innerHTML = `<span>数据模型:</sapn> ${value}`; }, get:function(){ return this._value; } }) btn.addEventListener('click', () => { const range = Math.floor(Math.random(0, 1) * 100); dataModel.value = range; }) input.addEventListener('input',(ev) => { dataModel.value = ev.target.value; }) const initPage = () => { dataModel.value = 100; } initPage(); root.append(input); root.append(model); </script> </html>
描述有点乱,看实现代码更清晰一点,有问题欢迎指正
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]