JavaScript学习随记——属性类型
<!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学习随记——属性类型相关推荐
- JavaScript学习随记——错误类型
错误类型: 执行代码期间可能会发生的错误有多种类型.每种错误都有对应的错误类型,而当错误发生时,就会抛出相应类型的错误对象. ECMA-262定义的7种错误类型 Error: 是错误的基类型,其他错误 ...
- JavaScript 中对象的属性类型
对象的属性类型 JavaScript 中的对象的属性包括数据属性和访问器属性,在 JavaScript 引擎的内部实现中定义了用于描述属性(property)的特性(attribute).规范中将特性 ...
- JavaScript学习随记——常见全局对象属性及方法
<script type="text/javascript" charset="utf-8">//全局对象: Object.Array.Math等/ ...
- JavaScript学习随记——Function
每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会于某个函数绑定. 函数的定义方式 <script ...
- JavaScript学习随记——对象
JS中对象基本使用 <script type="application/javascript" charset="utf-8">//Objcet 所 ...
- JavaScript学习随记——数组一
数组的创建及length属性 <script type="text/javascript" charset="utf-8">// 数组创建方式一,此 ...
- JavaScript学习笔记|数据类型——Object类型、for in循环
对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型.是一组数据和功能的集合. 创建对象实例 1.使用new操作符后跟Object构造函数 var person = ne ...
- JavaScript学习随记——面向对象编程(继承)
@Example:基于原型链的继承 <!DOCTYPE HTML> <html><head><meta http-equiv="Content-Ty ...
- JavaScript学习随记——数组二
数组indexOf(arg) 和 lastIndexOf(arg)方法使用 <script type="text/javascript" charset="utf- ...
最新文章
- 35 w年薪,入职CV算法岗,我一个双非本科生如何做到的?
- 七夕节脱单“神助攻”!AI教你写情话
- 因缺失log4j.properties 配置文件导致flume无法正常启动。
- 计算机模型与体系架构的发展——从图灵机到云计算机1
- Android中从assets资源中读取图片文件并保存到内部存储器并加载显示在ImageView中
- mysql insert报错_mysql数据库使用insert语句插入中文数据报错
- python 随机获取列表的元素_练习 34 - 获取列表元素 - Learn Python 3 The Hard Way
- Python 解释器
- Go 语言实现 23 种设计模式适配器
- 网络爬虫--5.urllib库的基本使用(1)
- html翻转切换div效果,图片翻转效果
- Python生成大量随机人员信息
- 【转】Linux的僵尸进程解决攻略
- 计算机cmd复制粘贴指令,win7系统使用CMD命令复制和删除文件夹的方法
- em算法python包_关于EM算法原理的分析与理解(Python实现)
- 屏幕小于6英寸的手机_2019小屏手机有哪些 8款6英寸以下小屏全面屏手机推荐 (全文)...
- 基于tesseract的文字识别
- python画笑脸表情_用Matplotlib,妈妈再也不担心我没有表情包斗图了
- 常见Web安全漏洞深入解析
- 你的 APP 能否精准「推送」击中用户?!
热门文章
- Vue+ECharts的小示例
- 怎么圆角变直角_衣柜设计个圆角有什么用?效果好看又实用,会这样装的都是老木工...
- cascade sqlite 数据库_ON DELETE CASCADE无法正常工作在ios中的sqlite3中
- SVN还原与SVN更新区别
- python鼠标选中事件_python对绑定事件的鼠标、按键的判断实例
- vuex 管理vue-router的传值
- 如何写一个作用域安全的构造函数
- 11、Node.js 函数
- vue-cli 3.0 使用全过程讲解
- 解读浮动闭合最佳方案:clearfix