我是JavaScript新手,对我来说这似乎很奇怪......
function Employee() {}
var emp = new Employee();
emp.name = "John Doe";
alert(emp.name);
我甚至不知道搜索关键字的关键字 “名称”变量在哪里? 全局命名空间,公共财产还是其他什么?
答案 0 :(得分:6)
你在这里发生了一些事情,可以很容易地惹起Javascript新手。让我们逐行分解脚本。
function Employee() {}
这是定义一个新的构造函数,它将创建Employee
个对象。目前,该功能做得很少。
var emp = new Employee();
在这里,我们使用new
关键字实例化一个Employee对象,并将其分配给变量emp
。它将包含在声明的任何范围内 - 在本例中为全局范围。
emp.name = "John Doe";
我们将本地对象name
的属性emp
设置为“John Doe”。如果您来自一种要求您更明确地了解对象的语言,这可能看起来很奇怪。 Javascript并不关心构造函数对象中从未提及“name”属性。因此,在emp
上分配“名称”属性非常酷。这样做的一个缺点是,如果您创建Employee
的其他实例,则它们不一定具有name
属性。
alert(emp.name);
使用浏览器的提醒功能向我们显示名称“John Doe。”
因此,为了明确回答,name
是emp
(Employee的一个实例)的“公共”属性,在某种意义上,其他人可以直接读/写它。 Javascript没有明确声明公共或私有的方法。要获得这种行为,您必须依赖设计模式。如果你想模仿公共/私人财产,你可能会考虑“揭示”模式,Addy Osmani在他非常好的书Learning Javascript Design Patterns