菜菜说不知道 Property 和 Attribute 的区别

936 阅读6分钟

"Property" 和 "Attribute" 是意思有些相近的词,都可以翻译为“属性”。但在计算机科学中,这两个词被用来描述不同的概念,下面简要概括二者区别。

Property :指对象所拥有的特性,强调了某个对象固有或特定的特征。

Attribute :更多地指那些被赋予或附加上去的特征,用于提供关于事物的更多信息或描述,强调的是解释或说明(包括对 Property 的解释或说明)是“被附加”在事物上。

保持这种区分有助于清晰地表达不同类型的特征或特性。

下面从英语词源以及计算机科学专业词汇的角度来阐述二者的区别。


词源

Property:

大约在公元 1300 年,指的是个体或类别始终存在的“天性、品质、鲜明的性格”,之后在 14 世纪早期扩展到指“拥有的财产、土地或物品,受所有权制约的事物”。

来源于英法时期对古法语 "proprete"(意为“个性、特点;财产”)的修改,以及直接源于拉丁语 "proprietatem"(所有权、财产、品质),字面意为“特殊特征”,是对希腊语 "idioma" 的借译。

在现代用法中,"Property" 通常指一个人或实体所拥有的任何形式的物品或资源,如土地、房屋、知识产权等。它也广泛用于描述事物的特性或特征,如一个物体的颜色、形状或大小。

Attribute:

"Attribute" 一词来源于 14 世纪晚期的拉丁语 "attributus"(动词形式)和 "attributum"(名词形式),意为 " 赋予、指派 "。

作为动词,它表示将特征或责任分配或归因于某人或某物;

作为名词,则特指被赋予的特质或标志,尤指优秀或显著的特点。

在现代用法中,"Attribute" 通常指任何被赋予或附加到对象上的性质或特征。

例句 1

Property:用来描述人的基本特征,例如:"Height is a property of a person."(身高是一个人的属性。)

Attribute:用来描述更细节或评价性质的特征,例如:"Kindness is an admirable attribute in a person."(仁慈是一个人值得钦佩的特质。)

在这个例子中,"Property" 用于描述基础的、内在的或可测量的特性,而 "Attribut" 用于描述更为抽象或派生的特性。

例句 2

Property:固有特征或特点,"One property of this house is its modern design."(这幢房子的一个属性是其现代化的设计。)

Attribute:评价性或附加的品质,"His bravery is considered an important attribute of his leadership."(他的勇气被视为他领导力的一个重要特质。)

思考:"Property" 是否可以与 "Attribute" 互换使用?

"One property of this house is its modern design.":可以互换,在描述事物的特征或品质时,这两个词有相似的用法。

"His bravery is considered an important attribute of his leadership.":不太恰当,在这个上下文中,"bravery"(勇敢)作为一个评价性或附加的品质被认为是 "leadership"(领导力)的一个重要方面。虽然 "Property" 通常强调固有特征,但在描述人的个性或行为特征时,"Attribute" 更常用于强调这些特质是评价性的或与某人的某个角色密切相关的。因此,"Attribute" 在这里用来传达勇敢是领导力的一个重要组成部分,而不仅仅是一个简单的固有特征。


计算机科学

在计算机科学的各个领域中,"Property" 和 "Attribute" 的具体含义和用法可能有所不同,但它们通常都指的是描述和定义数据、对象、元素或代码特性的信息。随着计算机科学的发展,这些术语已被广泛接受并用于不同的技术和框架中,形成了今天我们所知道的含义和用法。

当我们讨论 Property 和 Attribute 时,我们通常是在谈论一种层级或从属关系。

Property:

在计算机科学中,特别是在面向对象编程中,"Property" 用于描述对象的直接特性,这与其“特有的”或“固有的”内在的特质相呼应。

Attribute:

在计算机科学中,尤其是在 HTML、XML 或编程上下文中,"Attribute" 通常指定义或描述数据、元素或对象特征的附加信息或元数据(Metadata)。强调附加信息“被赋予”给数据、元素或对象。

元数据(Metadata)是指描述数据的数据。它提供了关于数据的信息,比如数据的来源、格式、内容、结构和特性等,但并不是数据本身的内容。

发展历史

HTML Attribute

HTML 元素使用 "Attribute" 的概念可以追溯到 HTML 的早期发展阶段和它的前身 SGML(标准通用标记语言),GML (通用标记语言)是 SGML 的前身。

在 GML 中使用 "Attribute" 来描述标记(Tag)的附加信息和特性,是因为它们提供了一种灵活的方式来附加额外的信息到标记上,而不改变标记本身的含义。

之所以选择 "Attribute" 是因为这一术语在标记语言的上下文中更符合其用途,强调了这些信息是对标记的补充而非核心内容。而 "Property" 通常用于描述对象的固有特性,在面向对象编程中更为常见。

HTML 继承了 SGML 和 GML 中对 "Attribute" 的使用,将其作为描述元素附加信息和特性的标准方法。这包括使用 “Attribute” 来指定元素的样式、行为、关系等,确保了 HTML 作为一种标记语言能够以一种结构化和灵活的方式描述复杂的文档内容和布局。

数据库和数据模型

在数据库和数据建模领域,特别是关系数据库,"Property" 和 "Attribute" 用于描述数据模型中的字段和字段的特性。一个 "Property" 是一个数据库表中的列,而 "Attribute" 包括这个列的数据类型、约束、默认值等。

面向对象编程(OOP)

在 OOP 中,对象的属性(Property)是对象状态的一部分,用来存储和描述对象的状态和行为,可以包括值、方法(functions or procedures)。在后来的发展中,还包括了 "Attribute",来描述这些 "Property" 的特性及元数据,如可见性、类型、范围等。


关联

《JavaScript 权威指南》(第七版)

  • 14.1 Property Attributes(中译:属性的特性)

Property Attributes 依据 ECMA Scirpt 标准 中的解释

Attributes are used in this specification to define and explain the state of Object properties as described in Table 3. Unless specified explicitly, the initial value of each attribute is its Default Value.

译文:Attributes 用于定义和解释本规范中对象属性(Object properties)的状态,如表 3 所示。除非另有明确规定,每个 attribute 的初始值就是其默认值。

有什么用?

Property 与 Attribute 主要是 JavaScript 元编程的一点前置小知识,而元编程技术是现代 JavaScript 框架一些功能的基础,如高阶组件、Hooks、JSX 的转换、反射和代理等。