0

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
        };
    };

更新下面的答案 (1.)。

    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);
           }
    };

所以我试图访问相同的静态字段而不将其暴露给公众,并且仍然能够使用列表对象。

4

1 回答 1

0

本地函数非常好(在另一个函数中定义的函数),它们的使用有几个原因。首先,它们确实限制了在定义它们的函数内可以调用它们的范围。其次,它们可以访问父函数的参数和局部变量:

Person.PerformSomeTypeOfOperation = function (someThing) {

    function MakeSomethingOk() { /* code here */ }

    if (someThing == 'turnsOutToBeOk') { return 'anyThing' }
    else {
        MakeSomethinngOK();
    };
};

通常会在父函数的开头定义它们,因为 javascript 解释器无论如何都会将它们“提升”到该位置。

至于你的第二个问题,静态函数可以有静态数据。因此,您可以拥有 Persons.list = [],然后任何人都可以作为 Persons.list 访问该数据,包括其他功能。如果您想要只有成员函数可以访问的私有数据,那么您将不得不使用不同的构造,例如这里

您的第三个问题几乎只是一个语义问题。通常构造函数的目的是创建/初始化一个对象。如果您只想拥有一个单例(一个静态对象),我认为它更像是一次性初始化,而不是可用于多个对象的构造函数,但这只是我的观点 - 我不认为在这种情况下,有一个确切的定义可以区分创建/初始化单例与多个对象。

于 2012-04-04T19:30:36.730 回答