ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

对象、类和面向对象编程

2022-02-02 14:31:26  阅读:128  来源: 互联网

标签:定义 对象 特性 面向对象编程 year true 属性


对象

        对象是数个属性无序的集合。

        ECMA-262使用一些内部特性来描述属性的特征(对象的属性的特性)。

        属性分为数据属性(定义属性时使用)和访问器属性(获取或设置属性值时使用):

               数据属性                       数据属性包含一个保存数据值的位置。值会从这个位置读取,也会写入到这个位置。数据属性有 4个特性描述它们的行为。  [[Configurable]]:表示属性是否可以通过 delete 删除并重新定义,是否可以修改它的特性,以及是否可以把它改为访问器属性。默认情况下,所有直接定义在对象上的属性的这个特性都是 true,如前面的例子所示。  [[Enumerable]]:表示属性是否可以通过 for-in 循环返回。默认情况下,所有直接定义在对象上的属性的这个特性都是 true,如前面的例子所示。  [[Writable]]:表示属性的值是否可以被修改。默认情况下,所有直接定义在对象上的属性的这个特性都是 true,如前面的例子所示。  [[Value]]:包含属性实际的值。这就是前面提到的那个读取和写入属性值的位置。这个特性的默认值为 undefined。 将属性显式添加到对象之后,[[Configurable]]、[[Enumerable]]和[[Writable]]都会被默认设置为 true,而[[Value]]特性会被设置为指定的值。 访问器属性                [[Configurable]]:表示属性是否可以通过 delete 删除并重新定义,是否可以修改它的特性,以及是否可以把它改为访问器属性。默认情况下,所有直接定义在对象上的属性的这个特性都是 true,如前面的例子所示。  [[Enumerable]]:表示属性是否可以通过 for-in 循环返回。默认情况下,所有直接定义在对象上的属性的这个特性都是 true,如前面的例子所示。  [[Get]]:获取函数,在读取属性时调用。默认值为 undefined。  [[Set]]:设置函数,在写入属性时调用。默认值为 undefined。  
// 定义一个对象,包含伪私有成员 year_和公共成员 edition let book = {      year_: 2017,      edition: 1 }; Object.defineProperty(book, "year", {         get() {             return this.year_;         }, set(newValue) {       if (newValue > 2017) {           this.year_ = newValue;           this.edition += newValue - 2017;       } } }); book.year = 2018; console.log(book.edition); // 2 year_中的下划线常用来表示该属性并不希望在对象方法的外部被访问。 这是访问器属性的典型使用场景,即设置一个属性值会导致一些其他变化发生。 获取函数和设置函数不一定都要定义。只定义获取函数意味着属性是只读的,尝试修改属性会被忽略。在严格模式下,尝试写入只定义了获取函数的属性会抛出错误。类似地,只有一个设置函数的属性 是不能读取的,非严格模式下读取会返回 undefined,严格模式下会抛出错误。 Object.defineProperty(给其添加属性的对象,属性名称,描述符对象):用来修改对象属性的特性,如果省略第三个参数则会把属性特性的值设置为false;

标签:定义,对象,特性,面向对象编程,year,true,属性
来源: https://www.cnblogs.com/yibaihe/p/15860305.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有