<!DOCTYPE HTML>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>属性类型</title></head>      <body><script type="text/javascript" charset="utf-8">/*** ECMAScript 中有两种属性:数据属性和访问器属性。* * 要修改属性默认的特性,必须使用ECMAScript5的Object.defineProperty()方法。* 语法:Object.defineProperty(属性所在的对象,属性名字,描述符对象);* 注意:描述符对象的属性必须是:configurable、enumerable、writable 和 value 。* * 描述符对象属性:*         configurable:[true|false]表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。*      enumerable:[true|false]表示能否通过 for-in 循环返回属性。*       writable:[true|false]表示能否修改属性的值。*       value:包含这个属性的数据值,读取属性值得时候,从这个位置读;写入属性值得时候,把新值保存在这个位置。这个特性的默认值为undefined。*/var person = {};//定义属性特性Object.defineProperty(person,"name",{writable:false,   //不可写value:"张三"       //属性的值为"张三"});console.log(person.name);   person.name = "李四";console.log("新赋值后:"+person.name);/********************* 【开始】运行结果 ********************张三新赋值后:张三********************* 【结束】运行结果 ********************/
</script>     <script type="text/javascript" charset="utf-8">var person1 = {};//定义属性特性//注: 一旦把属性定义为不可配置,就不能再把它变回可配置了,此时,再调用 Object.defineProperty() 方法修改除 writable 之外的特性,都会导致错误。Object.defineProperty(person1,"name",{configurable:false,   //不能从对象中删除属性value:"张三1"       //属性的值为"张三1"});console.log(person1.name); delete person.name;console.log("删除属性后:"+person1.name);//从定义属性特性(运行时报错)Object.defineProperty(person1,"name",{configurable:true,    //可以从对象中删除属性value:"张三2"       //属性的值为"张三2"});console.log("从定义属性特性后:"+person1.name);/********************* 【开始】运行结果 ********************张三1删除属性后:张三1TypeError: can't redefine non-configurable property "name"Object.defineProperty(person1,"name",{********************* 【结束】运行结果 ********************/
</script> <script type="text/javascript" charset="utf-8">/*** 访问器属性*/var book = {_year:2004,edition:1};//定义访问器属性/*** 访问器属性有如下4个特性。* configurable:[true|false]表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。* enumerable:[true|false]表示能否通过 for-in 循环返回属性。* get:在读取属性是调用的函数,默认值为 undefined。* set:在写入属性是调用的函数,默认值为 undefined。* */Object.defineProperty(book,"year",{get:function(){return this._year;},set:function(val){if(val > 2000){this._year = val;this.edition = val - 2000;}}});book.year = 2005;console.log(book);console.log(book.year);console.log(book.edition);/********************* 【开始】运行结果 ********************Object { _year=2005,  edition=5}20055********************* 【结束】运行结果 ********************/
</script><script type="text/javascript" charset="utf-8">/*** 定义多个属性Object.defineProperties()方法。* 语法:Object.defineProperties(添加和修改其属性的对象,对象的属性);*/var book1 = {};Object.defineProperties(book1,{//数据属性_year:{writable:true,    // 不写的话默认为 falsevalue:2000},//数据属性edition:{writable:true,value:0},//访问器属性year:{get:function(){return this._year;},set:function(newVal){if(newVal > this._year){this.edition += (newVal - this._year)*2;this._year = newVal;}}}});book1.year = 2005;console.log("year:"+book1.year+",edition:"+book1.edition);book1.year = 2007;console.log("year:"+book1.year+",edition:"+book1.edition);//读取属性的特性var descriptor = Object.getOwnPropertyDescriptor(book1,"_year");console.log(descriptor.value);           //2007console.log(descriptor.configurable); //falseconsole.log(typeof(descriptor.get)); //undefinedvar descriptor = Object.getOwnPropertyDescriptor(book1,"year");console.log(descriptor.value);         //undefinedconsole.log(descriptor.configurable);    //falseconsole.log(typeof(descriptor.get)); //function/********************* 【开始】运行结果 ********************year:2005,edition:10year:2007,edition:142007falseundefinedundefinedfalsefunction********************* 【结束】运行结果 ********************/
</script>         </body>
</html>

JavaScript学习随记——属性类型相关推荐

  1. JavaScript学习随记——错误类型

    错误类型: 执行代码期间可能会发生的错误有多种类型.每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象. ECMA-262定义的7种错误类型 Error: 是错误的基类型,其他错误 ...

  2. JavaScript 中对象的属性类型

    对象的属性类型 JavaScript 中的对象的属性包括数据属性和访问器属性,在 JavaScript 引擎的内部实现中定义了用于描述属性(property)的特性(attribute).规范中将特性 ...

  3. JavaScript学习随记——常见全局对象属性及方法

    <script type="text/javascript" charset="utf-8">//全局对象: Object.Array.Math等/ ...

  4. JavaScript学习随记——Function

    每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会于某个函数绑定. 函数的定义方式 <script ...

  5. JavaScript学习随记——对象

    JS中对象基本使用 <script type="application/javascript" charset="utf-8">//Objcet 所 ...

  6. JavaScript学习随记——数组一

    数组的创建及length属性 <script type="text/javascript" charset="utf-8">// 数组创建方式一,此 ...

  7. JavaScript学习笔记|数据类型——Object类型、for in循环

    对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型.是一组数据和功能的集合. 创建对象实例 1.使用new操作符后跟Object构造函数 var person = ne ...

  8. JavaScript学习随记——面向对象编程(继承)

    @Example:基于原型链的继承 <!DOCTYPE HTML> <html><head><meta http-equiv="Content-Ty ...

  9. JavaScript学习随记——数组二

    数组indexOf(arg) 和 lastIndexOf(arg)方法使用 <script type="text/javascript" charset="utf- ...

最新文章

  1. 35 w年薪,入职CV算法岗,我一个双非本科生如何做到的?
  2. 七夕节脱单“神助攻”!AI教你写情话
  3. 因缺失log4j.properties 配置文件导致flume无法正常启动。
  4. 计算机模型与体系架构的发展——从图灵机到云计算机1
  5. Android中从assets资源中读取图片文件并保存到内部存储器并加载显示在ImageView中
  6. mysql insert报错_mysql数据库使用insert语句插入中文数据报错
  7. python 随机获取列表的元素_练习 34 - 获取列表元素 - Learn Python 3 The Hard Way
  8. Python 解释器
  9. Go 语言实现 23 种设计模式适配器
  10. 网络爬虫--5.urllib库的基本使用(1)
  11. html翻转切换div效果,图片翻转效果
  12. Python生成大量随机人员信息
  13. 【转】Linux的僵尸进程解决攻略
  14. 计算机cmd复制粘贴指令,win7系统使用CMD命令复制和删除文件夹的方法
  15. em算法python包_关于EM算法原理的分析与理解(Python实现)
  16. 屏幕小于6英寸的手机_2019小屏手机有哪些 8款6英寸以下小屏全面屏手机推荐 (全文)...
  17. 基于tesseract的文字识别
  18. python画笑脸表情_用Matplotlib,妈妈再也不担心我没有表情包斗图了
  19. 常见Web安全漏洞深入解析
  20. 你的 APP 能否精准「推送」击中用户?!

热门文章

  1. Vue+ECharts的小示例
  2. 怎么圆角变直角_衣柜设计个圆角有什么用?效果好看又实用,会这样装的都是老木工...
  3. cascade sqlite 数据库_ON DELETE CASCADE无法正常工作在ios中的sqlite3中
  4. SVN还原与SVN更新区别
  5. python鼠标选中事件_python对绑定事件的鼠标、按键的判断实例
  6. vuex 管理vue-router的传值
  7. 如何写一个作用域安全的构造函数
  8. 11、Node.js 函数
  9. vue-cli 3.0 使用全过程讲解
  10. 解读浮动闭合最佳方案:clearfix