识别 Javascript 对象中的“类名”
Posted
技术标签:
【中文标题】识别 Javascript 对象中的“类名”【英文标题】:Identify a "Class Name" in Javascript Object 【发布时间】:2014-10-24 15:55:51 【问题描述】:我来到 *** 是为了找到这个问题的答案,因为我发现它是一个极好的知识来源。这个问题似乎确实有很多答案,但我找不到适合我需要的答案。
在从事服务器端编程多年后,我终于决定在客户端可以更快地完成很多事情,因此我决定更加热情地投入到 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 ABC.Object1()
但这是不好的语法,因为那里不应该有句号。
我没有那么多的类,所以我很乐意重做所有的构造函数,但我希望得到关于如何做的建议,这样我就可以确定类的名称并维护命名空间的想法。通过调用命名空间 ABC 下的所有内容(不是真实名称,而是说明性的,我将命名冲突的可能性降到最低。
有人建议放入构造函数 "this.name = "ABC.Object1",这样会起作用,但那太笨拙了,肯定无法扩展。
非常感谢任何建议。
【问题讨论】:
顺便说一句,您缺少(可选)分号。 【参考方案1】:你需要创建一个命名函数表达式:
ABC.Object1 = function Object1() ;
请注意,函数表达式的名称与属性的名称没有任何关系。
【讨论】:
+1 不仅是为了获得完美的答案,而且是为了让您处于 399.505,因此您的头像以 400K 呈现:) 更多的人应该知道函数实际上是如何命名的。 但是对象的名称将是 Object1,并且该名称可能与其他对象名称冲突。除非我错过了你的观点,在这种情况下我会要求澄清 @MartinHorton:实际上,不;函数表达式中的名称不会创建全局。阅读kangax.github.io/nfe【参考方案2】:我认为你错过了我的意思 - 如果我将其定义为:
ABC.Object1 = function Object1() ;
那么该对象可能具有 Object1 的名称,但随后也是这样:
XYZ.Object1 = function Object1() ;
因此“命名空间”的优势就丧失了。
但是回到我原来的帖子,当在调试器中停止时, this 的值被定义为 ABC.Object1。调试器是如何确定这一点的,有没有办法让我做同样的事情?
【讨论】:
以上是关于识别 Javascript 对象中的“类名”的主要内容,如果未能解决你的问题,请参考以下文章