”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 属性访问器

属性访问器

发布于2024-11-04
浏览:529

Property accessors

了解 JavaScript 中的属性访问器

在 JavaScript 中,属性访问器是允许您访问对象属性的机制。有两种主要方法可以做到这一点:点表示法和方括号表示法。

点符号

点表示法是访问属性的最常见方法。您只需使用点 (.) 后跟属性名称即可。

括号表示法

当属性名称是动态的或不是有效的标识符(例如,它包含空格或特殊字符)时,括号表示法很有用。您使用方括号 ([]) 并将属性名称作为字符串传递

在 JavaScript 中创建对象

该语言提供了称为对象文字表示法的语法,用于快速创建对象。对象字面量用花括号表示。以下示例创建一个没有属性的空对象。

var animal = {};

在花括号内,属性及其值被指定为键/值对列表。
键可以是字符串或标识符,而值可以是任何有效的表达式。键/值对列表以逗号分隔,每个键和值用冒号分隔。

以下示例使用文字表示法创建一个具有三个属性对象。

第一个属性,动物,占据第一位。
第二个属性 dolphin 使用字符串指定,并且还存储字符串值。第三个属性,哺乳动物,存储一个空对象。

var animal = {
  dolphin: 1,
  "swim": "some string",
  mammal: {
  }
};

每个属性都写在单独的行上并缩进。整个对象可以写在一行上,但这种格式的代码更具可读性。对于具有许多属性的对象或嵌套对象尤其如此。

JavaScript 提供了两种用于访问对象属性的表示法。

第一个也是最常见的,被称为点符号
在点表示法下,通过给出主机对象的名称、后跟句点(或点)、再后跟属性名称来访问属性。

点符号

点表示法是访问属性的最常见方法。您只需使用点 (.) 后跟属性名称即可。例如:

以下示例显示如何使用点表示法读取和写入属性。如果对象.dolphin
最初的值为1,执行该语句后其值将变为2。

  • 请注意,如果animal.dolphon 还没有值,那么它将是未定义的。
animal.dolphin = animal.dolphin   1;

访问对象属性的语法称为括号表示法。在括号表示法中,对象名称后跟一组方括号
方括号 内,属性名称指定为 字符串
前面的点表示法示例已在下面重写为使用括号表示法。虽然代码可能看起来不同,但它在功能上与前面的示例相同。

object["dolphin"] = object["dolphin"]   1;

括号表示法点表示法更具表现力,因为它允许变量指定全部或部分属性名称
这是可能的,因为 JavaScript 解释器会自动将方括号内的表达式转换为字符串,然后检索相应的属性

以下示例演示如何使用括号表示法动态创建属性名称。在示例中,属性名称 foo 是通过将变量 d 的内容与字符串“dolphin”连接起来创建的。

var d = "d";

object[d   "dolphin"] = "bar";

括号表示法还允许属性名称包含点表示法禁止的字符。
例如,以下语句在括号表示法中是完全合法的。但是,如果您尝试以点表示法创建相同的属性名称,则会遇到语法错误。

object["!@#$%^&*()."] = true;

访问嵌套属性

嵌套对象的属性可以通过将点和/或括号引用链接在一起来访问。
例如,以下对象包含一个名为 dolphin 的嵌套对象,该对象包含另一个名为哺乳动物的对象,该对象具有一个名为years 的属性,该属性的值为 one。

var animal = {
  dolphin: {
    mammal: {
      years: 1
    }
  }
};

以下表达式访问嵌套属性years。第一个表达式使用 点表示法 ,而第二个表达式使用 方括号表示法
第三个表达式结合了 两种表示法以获得相同的结果.

animal.dolphin.mammal.lungs;
animal["dolphin"]["mammal"]["years"];
animal["dolphin"].mammal["years"];

如果使用不当,像上一个示例中所示的表达式可能会导致性能下降。
计算每个 点或括号表达式 需要时间。

如果多次使用同一属性,则更有意义的是访问该属性一次,然后将该值存储在局部变量中以供将来使用。以下示例在循环内多次使用 bar。然而,bar 不是浪费时间反复计算相同的值,而是存储在局部变量中。

var years = animal.dolphin.mammal.years;
var count = 0;

for (var i = 0; i 



函数作为方法

当函数用作对象属性时,它被称为方法。与属性一样,方法也可以用对象文字表示法指定。以下示例显示了这是如何完成的。

var animal = {
  sum: function(dolphin, years) {
    return dolphin   years;
  }
};

方法也可以使用点和括号表示法调用。
以下示例 使用两种表示法调用 上一个示例中的 sum() 方法。

dolphin.sum(1, 2);
dolphin["sum"](1, 2);

添加属性和方法

对象字面量表示法对于创建新对象很有用,但是它不能向现有对象添加属性或方法。
幸运的是,向对象添加新数据就像创建赋值语句一样简单

以下示例创建一个空对象
然后使用赋值语句添加两个属性(海豚和哺乳动物)和方法年。
请注意,此示例使用 点表示法 ,但 括号表示法 也同样有效。

var animal = {};
animal.dolphin = 1;
animal.mammal = null;
animal.years = function() {
  return "I am 5 years()";
};

概括
对象是由基元和其他对象构建的复合数据类型。对象的构建块通常称为其字段或属性。属性用于描述对象的某些方面。例如,属性可以描述列表的长度、狗的颜色或人的出生日期。
因此,JavaScript 对象语法对于理解至关重要,因为它是该语言的基础。
首先,您需要先了解对象,然后才能了解面向对象的编程。

  • 点表示法:当属性名称是有效标识符时使用。
  • 括号表示法:当属性名称是动态的或无效标识符时使用。 这些访问器是 JavaScript 中有效操作对象及其属性的基础。

快乐编码!

版本声明 本文转载于:https://dev.to/irenejpopova/property-accessors-2dgk?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-07-18
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-07-18
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-07-18
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-07-18
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-07-18
  • Python环境变量的访问与管理方法
    Python环境变量的访问与管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    编程 发布于2025-07-18
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-07-18
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-07-18
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-07-18
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 在使用Chrome and IE9中的图像时遇到的一个频繁的问题是围绕图像的持续薄薄边框,尽管指定了图像,尽管指定了;和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下...
    编程 发布于2025-07-18
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-07-18
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-07-18
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-07-18
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-07-18
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-07-18

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3