Object.defineProperty这个方法非常值得学习,很多mvc框架中的双向数据绑定就是通过它来实现的。

  本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助。

开始使用

  Object.defineProperty接收三个参数

   *  目标对象

   *  需要要定义的属性名或方法的名字

   *  目标属性所拥有的特性 - descriptor (之后讲解下面案例不包括)

  代码实例

var User = {};
Object.defineProperty(User, 'info', {
value: 123
});
console.log(User.info);

descriptor

  descriptor接收6个参数

  注意事项:如果使用了(value和writable)就不能使用(get和set),他们可以理解为两组参数。如果同时使用就会报错。

  另外如果参数中设置configurable 又设置了value,writable,configurable,将会以value,writable,configurable中设置的值为准。

var User = {};
Object.defineProperty(User, "info", {
// value: 123, // 属性的值
// writable: false, // 默认为false 如果值为false那么属性的值就不能被重写,只能读取。
configurable: false,//默认false 如果值为false 就不能再设置或修改他的(value,writable,configurable)
enumerable: false,// 默认false 如果值为false就不能再for..in循环中遍历和 Object.keys() 中被枚举。
// 调用时不传参执行的方法
get: function () {
return 'get'
},
//调用时传参执行的方法
set: function (set) {
return set
}
});
console.log(User.info);//调用get方法输出 get
console.log(User.info = 'aaa');//调用 set 方法 输出 aaa

  值的修改

  注意事项: configurable=false,但只要是设置了writable 值还是会修改的,如果writable=false,那么两次输出的结果都会是123。

var User = {};

Object.defineProperty(User, "info", {
value: 123,
writable: true,
configurable: false
}); console.log(User.info); // 输出 123
User.info = 456;
console.log(User.info); // 输出 456

  enumerable

  注意事项如果enumerable=false,那么输出就会是一个空数组、

var User = {};

Object.defineProperty(User, "info", {
value: 123,
enumerable: true,
}); console.log(Object.keys(User)); //输出['info']

  实战小案例实现双向数据绑定

     html源码

    <p>今天天气  :  <span id='state'>晴天</span></p>
<div id="clothes"></div>

    JavaScript源码

var UserInfo = {};

Object.defineProperty(UserInfo, "state", {
get: function () {
return document.getElementById('state').innerHTML;
},
set: function (nick) {
document.getElementById('state').innerHTML = nick;
}
}); Object.defineProperty(UserInfo, "clothes", {
get: function () {
return document.getElementById('clothes').innerHTML;
},
set: function (clothes) {
document.getElementById('clothes').innerHTML = clothes;
}
}); console.log(UserInfo.state); //输出晴天
UserInfo.clothes = "适合穿短袖";//修改html中的数据

  

最新文章

  1. 配置Tomcat使用https协议
  2. Word发布博客测试
  3. css3 border-radius
  4. PAT 1022. D进制的A+B (20)
  5. 【JSON 注解】JSON循环引用2----JSON注解@JsonIgnoreProperties+JAVA关键字transient+后台对象与JSON数据的格式互相转化
  6. oracle存储海量数据 设计方案
  7. vim(5)vim下wimrc的配置,解决中文乱码问题
  8. MFC 颜色选择对话框、颜色按钮
  9. 关于MD5加密的小知识
  10. GDI+ 填充背景时,非常多时候不起作用,GDI、GDI+配合运用
  11. The King’s Problem HDU - 3861(连通图 缩点 匹配)
  12. vue 使用瞬间
  13. Kali Linux常用服务配置教程获取IP地址
  14. 1047 Integer Inquiry
  15. Linux(CentOS)用户修改密码有效期(chage命令)
  16. python中\r的意义及用法
  17. sql 学习
  18. html (第四本书第八章参考)
  19. java注册后缀样式(ajax提示)
  20. Javascript特效代码大全(420个)(转)

热门文章

  1. mysql安装 卸载 查字符集编码
  2. 如何使用OpenGL中的扩展
  3. 【bzoj4887】:[Tjoi2017]可乐 矩阵乘法,快速幂
  4. win10下安装mysql-5.7.25-winx64
  5. codis__数据迁移和伸缩容
  6. 你不可不知的 React Native 混合用法(Android 篇)
  7. JMessage Android 端开发详解
  8. nginx高性能WEB服务器系列之一简介及安装
  9. css3 -webkit-filter
  10. openstack 的horizon的结构