1.)如果我调用下面的静态函数并且必须对传递给静态函数的一些数据执行附加操作。调用嵌套的内部函数会创建一个闭包吗? 我所追求的是将MakeSomethingOk等操作保持在全局范围内,因为MakeSomethingOk只与Person.PerformSomeTypeOfOperation相关
2。)无论如何从其他静态函数构造函数访问像_persons []这样的集合对象,就像在共享中一样?无需执行Persons._persons
3.如果函数是静态的,函数构造函数仍然是指构造函数吗?
function Person() { };
function Persons() { var _persons = []; };
Person.PerformSomeTypeOfOperation = function (someThing) {
if (someThing == 'turnsOutToBeOk') { return 'anyThing' }
else {
function MakeSomethingOk() { }
//someThing is now being made Ok
};
};
function Person() { };
function Persons() { **protected static** _persons = []; };
Person.Operation1 = function (person) {
if(person.id == _persons[0].id){}//do something
};
Person.Operation2 = function (person) {
if(person.height > 7){//do something, like call NBA
_persons.push(person);
}
};
Person.Operation3 = function (person) {
if(person.isHungOver){//do something, like call AA
_persons.slice(3,1);
}
};
所以我试图访问相同的静态字段而不将其暴露给公众,并且仍然能够使用列表对象。
答案 0 :(得分:0)
本地函数非常精细(在另一个函数中定义的函数)并且它们的使用有几个原因。首先,它们确实限制了它们在定义的函数中可以调用的范围。其次,它们可以访问父函数的参数和局部变量:
Person.PerformSomeTypeOfOperation = function (someThing) {
function MakeSomethingOk() { /* code here */ }
if (someThing == 'turnsOutToBeOk') { return 'anyThing' }
else {
MakeSomethinngOK();
};
};
通常会在父函数的开头定义它们,因为javascript解释器无论如何都会将它们“提升”到该位置。
关于第二个问题,静态函数可以包含静态数据。所以,您可以拥有Persons.list = []然后任何人都可以访问该数据作为Persons.list,包括其他功能。如果您想要只有成员函数可以访问的私有数据,那么您将必须使用不同的构造,如here。
你的第三个问题几乎只是一个语义问题。通常,构造函数的目的是创建/初始化对象。如果你只有一个单例(一个静态对象),我认为它更像是一次初始化而不是可以用于多个对象的构造函数,但这真的只是我的意见 - 我不认为在这种情况下,有一个确切的定义可以区分创建/初始化单例与多个对象。