繁体   English   中英

识别Javascript对象中的“类名”

[英]Identify a “Class Name” in Javascript Object

我来到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()abd创建一个对象,我可以调用o.someMethod()

但是然后我想编写s debug()方法,并在其中记录一些调试信息。 我在浏览器中使用的是Chrome,当我中断并跟踪时,我可以看到“ o”的类型为“ ABC.Object1”,但是无论如何我都无法在我的方法中确定“类”的名称。 我一直将类放在引号中,因为我知道确实没有像Javascript类这样的东西。 但是看来我应该能够做到。 我注意到一些方法使用构造函数Function的名称,所以我将构造函数更改为

function ABC.Object1(){}

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

我没有那么多的类,所以我很乐意重做所有的构造函数,但是我想提出建议,以便确定类的名称并保持名称空间的思想。 通过在命名空间ABC下调用所有内容(不是真实名称,而是说明性的名称),可以最大程度地减少命名冲突的可能性。

有人建议将构造函数“ this.name =“ ABC.Object1”放进去,这样可以正常工作,但这太笨拙了,肯定无法扩展。

任何建议,不胜感激。

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

ABC.Object1 = function Object1() {};

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

我认为您错过了我的观点-如果我将其定义为:

ABC.Object1 = function Object1() {};

那么该对象可能具有Object1的名称,但随后会这样:

XYZ.Object1 = function Object1() {};

这样就失去了“命名空间”的优势。

但是回到我的原始帖子,在调试器中暂停时,此值定义为ABC.Object1。 调试器如何确定这一点,我是否有办法做到这一点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM