2

在过去的一年左右的工作中,我一直在编写具有特定风格的 JavaScript(下面的示例),并且想知道是否有人可以告诉我这种风格或模式的名称。我认为它有一个名字,但其中之一是如果你不知道如何称呼它,那么很难找到任何帮助。

var Page =
{
    DoStuff: function ()
    {
        // stuff gets done here
    },

    Save: function ()
    {
        // save logic
    }

};

然后可以像这样调用上面的js:

Page.Save();

我们一直在使用它,因为这意味着我们可以为函数命名空间,所以如果每个页面都有一个 Save 函数,它们都可以被称为相同的名称,但不会发生冲突。

抱歉,如果之前有人问过这个问题,但就像我说的那样,当我不确定要使用什么关键字时,真的很难找到答案。

更新 感谢大家的快速响应。如果有人可以提供帮助,我对此还有一个问题。我过去曾尝试过一种函数重载,以便我可以拥有这样的东西:

var Page = 
{
    DoStuff: function ()
    {
        // do stuff
    },

    DoStuff: function (name, type)
    {
        // do stuff with the name and type params
    }
};

但是这些函数最终会相互覆盖,所以最后一个读入的函数替换了另一个函数,我最终只有一个函数,而不是能够同时调用这两个函数

Page.DoStuff();
Page.DoStuff('lews0r', 'newbie');

甚至可以重载这个命名空间/模块结构中的函数吗?或者我是否只需要坚持将第二个函数命名为不同的名称,例如 Page.DoStuff2() (以及最佳函数名称奖……)。

4

1 回答 1

1

通常,我认为人们将这些称为“模块”。“命名空间”也可能是一个合适的术语——通过在产品名称、库名称或公司名称中包含所有函数,您可以避免在全局命名空间中放置太多标签。

Nadh 建议将其称为“面向对象编程”;我认为通常的区别在于,在面向对象的编程中,你定义一个类,而不是一个对象——你告诉程序它如何创建尽可能多的 Page 实例,有时可以根据你的喜好进行少量修改。一些 Javascript 库提供了各种方法来执行此操作。但是,如果您直接将 Page 指定为“具有这些功能的对象”,我倾向于将其更多地视为“模块”。这大概就是像 Python 这样的语言倾向于工作的方式。

大多数这些实践可能没有一个正式的名称,因为我个人认为 ECMAScript (Javascript) 的原始设计者从未完全预料到它最终会被使用的方式;人们变得非常有创造力。

于 2013-07-25T15:16:32.333 回答