【问题标题】:What is the name/term for structuring JavaScript in this way?以这种方式构建 JavaScript 的名称/术语是什么?
【发布时间】:2013-07-25 14:53:53
【问题描述】:

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

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

    Save: function ()
    {
        // save logic
    }

};

那么上面的js就可以这样调用了:

Page.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() (以及最佳函数名称奖……)。

【问题讨论】:

  • 如您所说,Page 可以称为“命名空间”。它只是一个具有一些可调用属性的对象......那里没有真正的“模式”。
  • 你的意思是,OOP(面向对象编程)还是 Javascript 类?
  • 这已经解释得很好了:stackoverflow.com/questions/9384865/…

标签: javascript coding-style structure design-patterns


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2016-12-14
    相关资源
    最近更新 更多