各位程序员大家好,我开始学习 JavaScript 了。这种语法纯粹是魔法,有人可以澄清一下:
function CleanPet(){
alert("The pet is now clean!");
}
CleanPet.Description="Dirty Business";
我正在阅读的 Material 解释说,在 JavaScript 中,函数与任何其他对象一样,但是如果我将属性附加到函数,这是否意味着它是静态的,因为我实际上尚未声明它?
感谢您的帮助, I.N.
最佳答案
对象属性并不是像变量那样使用 var
进行正式意义上的“声明”。给定一个现有对象 CleanPet
,您可以分配诸如 CleanPet.Description
之类的属性(如问题中所示),如果不存在,它将创建 Description
属性尚不存在,或者如果已存在则覆盖该属性。
尝试访问尚未设置的对象属性也是“合法的”,例如,CleanPet.SomeOtherProperty
- 结果值将是未定义
。 (不是错误,尽管假设 CleanPet
实际上是一个对象。如果 CleanPet
为 null
或 undefined
则 CleanPet.SomeOtherProperty
会给出错误。)
因此,具体而言,函数声明:
function CleanPet { /* some code */ }
...声明一个恰好是函数的单个对象。这意味着您可以将其作为函数 CleanPet()
进行调用,但它仍然具有“普通”对象行为,例如分配属性的能力。
如果使用 new
调用,JavaScript 函数也是对象构造函数:
var cleanPet1 = new CleanPet();
在这种情况下,每次调用 new CleanPet()
时,JS 都会创建一个新对象(实例),但 CleanPet.Description
属性不会 可通过 cleanPet1.Description
访问,因为它是构造函数的属性,而不是生成的 new
实例的属性。所以从这个意义上说,是的,该属性是“静态的”。
关于javascript - 在函数内部存储属性,静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544537/