读取属性标签

获取对象属性标签,用 Object.getOwnPropertyDescriptor方法。
getOwnPropertyDescriptor(); 参数:属性所在对象(object),属性名(string)

  1. var obj = { code:2,element:"ele" };
  2. Object.getOwnPropertyDescriptor(obj,"code");
  3. //输出 { value: 2, writable: true, enumerable: true, configurable: true }

getOwnPropertyDescriptor返回该属性标签的对象。
value      属性值
writeable    属性是否可写(是否可修改)
enumerable    属性是否可枚举(是否在for in遍历中出现)
configurable   属性的其他属性标签是否可修改或者该属性是否可delete
一般方式添加这四个属性标签默认都是true

****************************************************************************************************************

定义属性标签

定义对象属性标签,用 Object.defineProperty()方法。
defineProperty(); 参数:目标对象(object),属性名(string),属性标签(object json(对象字面量)格式创建)

这里defineProperty的第三个参数的属性包括:valuewriteableenumerableconfigurable。value必须赋值,writeableenumerableconfigurable默认都为false。

  1. var obj = {};
  2. Object.defineProperty(obj,"o_name",{
  3. value:"obj_name",
  4. writeable:false,
  5. enumerable:false,
  6. configurable:false
  7. });
  8. obj.o_name = "New_name"; //输出 obj_name
  9. //writeable为false,所以无法修改该属性值。
  10. delete obj.o_name; //返回 false
  11. //configurable为false,所以无法被delete。
  12. Object.keys(obj) //返回空集合
  13. //enumerable为false,所以无法遍历

批量定义属性标签

定义对象属性标签,用 Object.defineProperties()方法。
defineProperties(); 参数:目标对象(object),批量属性标签(object json(对象子面量)格式创建)

  1. function o(){};
  2. var o1 = new o();
  3. Object.defineProperties(o1,{a:{value:1,enumerable:true},
  4. b:{value:2,writable:true},
  5. c:{value:3,configurable:true,writable:true}});
  6. Object.getOwnPropertyDescriptor(o1,"a");
  7. //返回 { value: 1,writable: false,enumerable: true,configurable: false }
  8. Object.getOwnPropertyDescriptor(o1,"b");
  9. //返回 { value: 2,writable: true,enumerable: false,configurable: false }
  10. Object.getOwnPropertyDescriptor(o1,"c");
  11. //返回 { value: 2,writable: true,enumerable: false,configurable: true }

****************************************************************************************************************

遍历对象属性

遍历对象属性除了用for in还可以用 Object.keys()方法。
keys(); 参数:遍历对象(object)。
keys()返回对象属性的数组。

  1. var obj = { a:1,b:2,c:3,d:4 };
  2. obj.e = 5;
  3. Object.keys(obj);
  4. //返回 [ 'a', 'b', 'c', 'd', 'e' ]
  5. Object.defineProperty(obj,"e",{value:15,enumerable:false});
  6. Object.keys(obj);
  7. //返回 [ 'a', 'b', 'c', 'd' ]
  8. obj.e; //输出 15

js之oop <三>属性标签的更多相关文章

  1. WCF入门教程(三)定义服务协定--属性标签

    WCF入门教程(三)定义服务协定--属性标签 属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的 ...

  2. js之oop <二> 对象属性

    js中对象属性可以动态添加和删除.删除对象属性用delete关键字. function obj(){ } var oo = new obj(); oo.a = "a"; oo.b ...

  3. WCF入门教程(三)属性标签

    属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义.如果已经有所了解, ...

  4. JS中OOP之模拟封装和继承和this指向详解

    大家好,今天我带大家学习一下js的OOP, 大家都知道,面向对象有三个基本特征,继承,封装和多态,面向对象的语言有那么几种,C++,PHP,JAVA等,而功能强大的JS可以模拟实现面向对象的两大特征, ...

  5. riot.js教程【五】标签嵌套、命名元素、事件、标签条件

    前文回顾 riot.js教程[四]Mixins.HTML内嵌表达式 riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期: riot.js教程[二] ...

  6. 【总结整理】js获取css的属性(内部,外部,内嵌(写在tag中))

    在JS中需要获取某个元素的宽高或者是绝对定位的位置信息,通常我们会这么写: var elemWidth = elem.style.width; console.log(elemWidth); //(空 ...

  7. 深入理解OOP(三):多态和继承(动态绑定和运行时多态)

    在前面的文章中,我们介绍了编译期多态.params关键字.实例化.base关键字等.本节我们来关注另外一种多态:运行时多态, 运行时多态也叫迟绑定. 深入理解OOP(一):多态和继承(初期绑定和编译时 ...

  8. 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

    接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...

  9. js倒计时函数和(js禁用和恢复a标签的操作)

    <script type="text/javascript"> /*获取手机号*/ var start_time=60; function get_phone_nums ...

随机推荐

  1. eclipse安装JS插件

    在eclipse中有三种Javascript插件可供选择: JSDT JSEclipse Spket Spket插件安装: 手动安装:到http://www.spket.com/download.ht ...

  2. Linux内核设计第四周——扒开系统调用三层皮

    Linux内核设计第四周 ——扒开系统调用三层皮 一.知识点总结 (一).系统调用基础知识 1.用户态和内核态 内核态:在高级别的状态下,代码可以执行特权指令,访问任意的物理地址: 用户态:在相应的低 ...

  3. mysql重点--正确使用

    1.一些错误情况 数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效.即使建立索引,索引也不会生效: - like '%xx' ...

  4. java 虚拟机--新生代与老年代GC

    Heap: JVM只有一个为所有线程所共享的堆,所有的类实例和数组都是在堆中创建的. Method area: JVM只有一个为所有的线程所共享的方法区.它存储类结构,例如运行时常量池,成员和方法数据 ...

  5. C语言 ---- 数组 iOS学习-----细碎知识点总结

    #pragma mark - 数组:用来存放同一数据类型的数据 // 数组的定义:类型说明符 数组名[常量表达式] = {值1, 值2, 值3...};    // 定义一个float类型的数组,用来 ...

  6. LeetCode Range Sum Query 2D - Mutable

    原题链接在这里:https://leetcode.com/problems/range-sum-query-2d-mutable/ 题目: Given a 2D matrix matrix, find ...

  7. DNS子域授权与转发配置

    正向区域SUB_ZONE_NAME IN NS NSSERVER_SUB_ZONE_NAME NSSERVER_SUB_ZONE_NAME IN A IP .com xingxing.com. xin ...

  8. MetInfo数据库结构表

    met_admin_table 表 Key 字段名称 数据类型 不为空 默认值 说明 PK id INT(11) Yes   编号   admin_type TEXT Yes   管理员类型   ad ...

  9. struts2数据校验与国际化

    数据校验: Action里的validate()方法能校验action类所有的方法,如果有错,如:addFieldError,会自动返回到workflow校验拦截器不向下继续进行,不用return i ...

  10. 重构wangEditor(web富文本编辑器),欢迎指正!

    提示:最新版wangEditor请参见:wangEditor.github.io 或者 https://github.com/wangfupeng1988/wangEditor 1. 前言 (下载源码 ...