2014-08-31 56 views
1

我来到了stackoverflow找到这个问题的答案,因为我发现它是一个神话般的知识来源。这个问题确实出现了很多答案,但我无法找到符合我需求的答案。在Javascript对象中确定一个“类名”

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

因为我在为一位顾客工作,所以我决定立即尝试做最佳实践。所以,我搜索了如何模仿命名空间和“类”读了,所以我演变代码作为现在怎么如下

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

我可以创建变种O =新ABC.Object1()ABD我的目标可以调用 o.someMethod()

但后来我想编写debug()方法,并在其中我想记录一些调试信息。我使用Chrome浏览器,当我断开并跟踪时,我可以看到“o”是“ABC.Object1”类型,但是我无法找到我的方法可以确定“类”名称的地方。我一直把类放在引号中,因为我知道真的没有Javascript类那样的东西。但似乎我应该能够做到这一点。我注意到一些方法使用构造函数的名称,所以我改变了构造函数

function ABC.Object1(){} 

但这是错误的语法,因为不应该有一段在那里。

我没有那么多的类,所以我很乐意重做所有的构造函数,但是我想请教关于如何实现它的建议,以便我可以确定类的名称并维护名称空间的想法。通过调用命名空间ABC下的所有东西(不是真实名称,但说明我最大限度地减少了命名冲突的机会。

有人建议在构造函数中放入“this.name =”ABC.Object1“太做作,当然无法扩展

任何意见大加赞赏

+1

顺便说一句,你缺少(可选)分号。 – SLaks 2014-08-31 02:57:57

回答

1

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

ABC.Object1 = function Object1() {}; 

注意函数表达式的名称没有与Th有什么关系e属性的名称。

+1

+1不仅仅是一个完美的答案,而是让你在399.505所以你的头像呈现为400K :)更多的人应该知道函数实际上可以如何命名。 – 2014-08-31 03:07:38

+0

但是,那么对象的名称将是Object1,名称可能与其他对象名称冲突。除非我错过了你的观点,在这种情况下,我会要求澄清 – 2014-08-31 04:03:49

+0

@MartinHorton:其实,没有;函数表达式中的名称不会创建全局。阅读http://kangax.github.io/nfe/ – SLaks 2014-08-31 19:31:46

0

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

ABC.Object1 = function Object1() {}; 

那么对象可能有Object1的名字照样会:

XYZ.Object1 = function Object1() {}; 

而且这样做的好处的“名称空间”丢失。

但是要回到我的原始文章,在调试器中暂停时,其值被定义为ABC.Object1。调试器如何确定这一点,是否有办法让我也这样做?

相关问题