【问题标题】:Convention for namespacing classes vs instances in javascript?命名空间类的约定与javascript中的实例?
【发布时间】:2011-06-22 11:25:52
【问题描述】:

我正在使用以下代码创建一个类的实例:

  test = new function(){
    ...
  }

但是,base 没有原型,因为它是从匿名函数创建的(我猜这就是原因?)。这使我无法为实例创建任何公共函数。

你可以说我可以通过简单地解决这个问题:

  function testClass(){
    ...
  }
  test = new testClass()

然后将公共函数附加到 testClass。 但这迫使我做不必要的命名空间。特别是,如果我将我的类命名为 this.is.a.space,那么我将如何称呼我的实例?这是一个空间实例? this.is.a.space.Instance?

这类事情有约定吗?

【问题讨论】:

  • 只是一个挑剔,你不是在创建一个类。 JS 没有类。另外,这是一本好书:mckoss.com/jscript/object.htm
  • 如果我正确理解了您的问题,您可以将类设为大写字母,例如 TestClass,并将实例设为小写字母 testClass
  • @Asad 类和实例之间的区别真的像首字母大写一样小吗?这似乎......在调试过程中不明智且非常容易出错。
  • JavaScript 区分大小写,因此可以通过这种方式进行区分。
  • @pimvdb 是对的,这也是 Java 中使用的流行约定。

标签: javascript class namespaces naming-conventions instance


【解决方案1】:

您仍然可以编写匿名函数并使用.__proto__ 访问其原型,如下所示:

test = new function(){
    ...
};

test.__proto__.foo = function() { return 1 };

但是,您只有一个实例,因此您也可以只使用:

test.foo = function() { return 1 };

我不完全确定您到底想要完成什么,但至于命名,通常将类命名为 SomeClass 和其他变量(如实例)沿 someVariable 行。 JavaScript 区分大小写,因此您可以使用 TestClass/testClass

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 2016-03-25
    • 2011-10-03
    • 2021-03-20
    • 2015-03-30
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多