描述JavaScript中成员和容器之间关系的最佳术语

Best term for describing the relationship between member and container in JavaScript

本文关键字:关系 之间 最佳 术语 JavaScript 成员 描述      更新时间:2023-09-26

在JavaScript中,你可以考虑两个对象之间的关系,就像一个"容器"和一个"成员"。例如:

var c1 = {m:1};

function C() {this.m = 1;} var c2 = new C();

function C() {var m = 1;} var c3 = new C();

在每种情况下,c对象和m对象之间都存在关系。你可以说,在第一种情况下,m是c1的静态元素。在第二种情况下,m是c2的实例成员。在第三种情况下,m是c3的元素

我怀疑这些术语在JavaScript语言的情况下在技术上是不正确的,但根据我的经验,它们是常用的,并且被大多数JavaScript开发人员理解。所以我的问题是:你会用哪个词来描述所有这些关系?例如,你会说m对c的"依恋"是"静态的"吗?或者m到c的隶属度是instance;等等?的? ?从m到c是"内的"?如果你明白我的意思。

用例是我正在记录一个JavaScript库,我选择将记录的对象组织到容器中,然后在此之下,组织到该容器的成员中。然后,我想根据成员与其容器的"关系"来组织成员:{内部、实例或静态}。有没有一个词可以描述的关系?

我想说,在第一种情况下(this.m), m是一个属性的对象是公开访问的。严格地说,你可以定义的所有属性都是"公共的",因为JavaScript没有可见性的概念。

在第二个例子中,m只是构造函数的一个局部变量。你给它起什么名字取决于你用它做什么。如果您在构造函数中定义了其他公共函数(方法),那么您可以将m称为"私有属性",因为它不能从外部访问,但可以通过方法访问。虽然这在技术上是不正确的,但我认为大多数人会理解你的意思。我还会明确地提到(在注释中)使用闭包来模拟这些带有局部变量的"私有属性"。

我更喜欢阅读没有发明新术语的文档。所以我更喜欢它们被称为属性和局部变量。如果您需要区分不应该更改的属性[1]和更改属性是API的一部分的属性,我会将它们记录下来,而不发明新词。例如,"m: Property"。不要更改。"answers"x:属性"。改变这个将会很有趣。"

局部变量就是局部变量,如果你写的是API文档,我看不出写文档有什么意义。它不能被改变,除非你提供一个函数来改变它,然后你只需要记录这个函数,而不是你用来支持它的内部局部变量。

[1]强调假定,因为从技术上讲,你可以随心所欲地修改它

基于Felix Kling的回答,我做了一些更深入的研究,并决定我在这里处理的是不同事物的属性。为了说明(并添加第四种情况):

给定C.m = 1; function C() { this.m = 2; var m = 3; } C.prototype.m = 4;

  • 设置为1的值是构造函数的属性
  • 设置为2的值是实例的属性。
  • 设置为3的值是一个本地属性(或构造函数的激活对象的属性?)
注意instance属性(在这个上)将会遮蔽同名的prototype属性