识别一个;“类名”;在Javascript对象中

识别一个;“类名”;在Javascript对象中,javascript,namespaces,classname,Javascript,Namespaces,Classname,我来到stackoverflow是为了找到这个问题的答案,因为我发现它是一个极好的知识来源。这个问题确实有很多答案,但我找不到一个适合我需要的答案 经过多年的服务器端编程工作,我最终决定在客户端可以更快地完成很多事情,因此我决定更积极地投入JavaScript 因为我为一位客户工作,所以我决定立即尝试并实施最佳实践。因此,我搜索了如何模拟名称空间并阅读了“类”,因此我对代码进行了如下改进 var ABC {}; // Create a namespace. ABC.Object1 = funct

我来到stackoverflow是为了找到这个问题的答案,因为我发现它是一个极好的知识来源。这个问题确实有很多答案,但我找不到一个适合我需要的答案

经过多年的服务器端编程工作,我最终决定在客户端可以更快地完成很多事情,因此我决定更积极地投入JavaScript

因为我为一位客户工作,所以我决定立即尝试并实施最佳实践。因此,我搜索了如何模拟名称空间并阅读了“类”,因此我对代码进行了如下改进

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()

但后来我想编写s debug()方法,并在其中记录一些调试信息。我正在使用Chrome浏览器,当我中断并跟踪时,我可以看到“o”的类型为“ABC.Object1”,但我无法找到我的方法可以确定“类”名称的位置。我一直在引用这个类,因为我知道实际上根本没有Javascript类。但看来我应该能做到。我注意到有些方法使用构造函数的名称,所以我将构造函数改为

function ABC.Object1(){}
但这是糟糕的语法,因为这里不应该有句点

我没有那么多的类,所以我很乐意重做所有的构造函数,但我想知道如何做,这样我就可以确定类的名称并保持名称空间的想法。通过调用名称空间ABC下的所有内容(不是真实名称,而是示例性名称),我将命名冲突的可能性降至最低

一个人建议输入构造函数“this.name=“ABC.Object1”,这样做会起作用,但这太草率了,肯定无法扩展


非常感谢您的建议。

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

ABC.Object1 = function Object1() {};

请注意,函数表达式的名称与属性的名称没有任何关系。

我认为您没有领会我的观点-如果我将其定义为:

ABC.Object1 = function Object1() {};
然后,对象的名称可能为Object1,但也可能是:

XYZ.Object1 = function Object1() {};
因此,“名称空间”的优势就消失了


但是回到我原来的帖子,当在调试器中停止时,它的值被定义为ABC.Object1。调试器是如何确定这一点的?我有没有办法做到这一点?

顺便说一句,你缺少(可选)分号。+1不仅是一个完美的答案,而且把你的头像设置为399.505,这样你的头像就会显示为400K:)更多的人应该知道函数实际上是如何具有名称的。但是,对象的名称将是Object1,并且该名称可能与其他对象名称冲突。除非我没有领会你的意思,在这种情况下,我会要求clarification@MartinHorton:实际上,不是;函数表达式中的名称不会创建全局.Read