1

我是 JavaScript 新手,这对我来说似乎很奇怪......

function Employee() {}
var emp = new Employee();
emp.name = "John Doe";
alert(emp.name);

我什至不知道该搜索什么关键字“名称”变量将位于何处?全局命名空间、公共属性或其他什么?

4

1 回答 1

6

您在这里发生了一些事情,很容易让 Javascript 新手绊倒。让我们逐行分解脚本。

function Employee() {}

这是定义一个将创建Employee对象的新构造函数。目前,该功能做的很少。

var emp = new Employee();

在这里,我们使用关键字实例化一个 Employee 对象并将其new分配给变量emp。它将被包含在它声明的任何范围内——在这种情况下,是全局范围。

emp.name = "John Doe";

我们将name本地对象的属性设置emp为“John Doe”。如果您来自要求您更明确地了解对象的语言,这可能看起来很奇怪。Javascript 不在乎您的构造函数对象中从未提及“名称”属性。所以,在emp. 这样做的一个缺点是,如果您创建其他实例,Employee它们不一定具有name属性。

alert(emp.name);

使用浏览器的警报功能向我们显示名称“John Doe”。

因此,明确回答是(Employee 的一个实例)name的“公共”属性,从某种意义上说,其他人可以直接读/写它。empJavascript 没有明确声明公共或私有的方式。要获得这种行为,您必须依赖设计模式。如果你想模仿公共/私有属性,你可以考虑“Revealing”模式,Addy Osmani 在他非常棒的书Learning Javascript Design Patterns中阐述了这一点

于 2013-10-04T04:07:21.770 回答