在Javascript对象中标识“类名”

时间:2014-08-31 02:55:39

标签: javascript namespaces classname

我来到stackoverflow找到这个问题的答案,因为我发现它是一个神话般的知识来源。确实似乎有很多这个问题的答案,但我无法找到符合我需求的答案。

经过多年的服务器端编程工作,我终于决定在客户端可以更快地完成很多工作,所以我决定更热衷于JavaScript。

因为我在为客户工作,所以我决定尽力做好最佳实践。所以我搜索了如何模拟命名空间并阅读" Classes"所以我按照以下内容进化了代码

var ABC {}; // Create a namespace.
ABC.Object1 = function() {} // A constructor for a class
ABC.Object1.prototype = {
    someMethod: function() {}
}

所以现在我可以通过var o = new ABC.Object1()创建一个对象,我可以调用它 o.someMethod()

但后来我想编写debug()方法,在其中我想记录一些调试信息。我正在使用Chrome浏览器,当我打破并追踪时,我可以看到" o"属于" ABC.Object1"但无论如何我无法找到我的方法可以确定"类"名称。我一直把类放在引号中,因为我知道确实没有Javascript类这样的东西。但似乎我应该能够做到这一点。我注意到一些方法使用构造函数的名称,所以我将构造函数更改为

function ABC.Object1(){}

但这是错误的语法,因为那里应该没有句号。

我没有那么多课程,所以我很乐意重做所有的构造函数但是我喜欢如何做的建议所以我可以确定类的名称并保持名称空间的想法。通过调用命名空间ABC下的所有内容(不是真实姓名,但说明我最小化命名冲突的可能性。

一个人建议加入构造函数" this.name =" ABC.Object1"那会起作用,但这太过分了,当然不会扩展。

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:1)

您需要创建一个命名函数表达式:

ABC.Object1 = function Object1() {};

请注意,函数表达式的名称与属性的名称无关。

答案 1 :(得分:0)

我认为你错过了我的观点 - 如果我把它定义为:

ABC.Object1 = function Object1() {};

然后该对象可能具有Object1的名称,但那样就是:

XYZ.Object1 = function Object1() {};

因此“命名空间”的优势就会丢失。

但是要回到原来的帖子,当在调试器中暂停时,它的值被定义为ABC.Object1。调试器如何确定这一点并且我有办法做同样的事情吗?