【问题标题】:How to see if a class has been instantiated如何查看一个类是否已实例化
【发布时间】:2013-01-08 16:13:49
【问题描述】:

这是一个代码示例

class person 
  constructor: (@name, @age) ->

bob = new person("bob", 11)

if person?
  alert "yes!"
else
  alert "no"

在此,我测试一个人类是否被实例化,它会提示“是!”就像它应该的那样。因为 bob 是一个人,并且被实例化了。

但是在这里:

class person 
  constructor: (@name, @age) ->

if person?
  alert "yes!"
else
  alert "no"

我希望它提醒“否”,因为没有人被实例化,但它仍然提醒“是!”

那么测试一个类是否被实例化的正确方法是什么。

澄清:

我不想测试看看 bob 是什么。我想看看是否有任何形式的人被实例化。

【问题讨论】:

  • person? 不检查是否可以实例化一个人,但它存在一个名为 person 的变量或函数(它确实存在,它是您的构造函数)。
  • 我相信你的意思是bob?,而不是person?
  • @jbabey 你误解了我的问题。我想看看 person 类是否以任何方式实例化。不管名字。

标签: javascript class coffeescript


【解决方案1】:

您正在测试是否定义了 person 类。这将完成您想要的。

class person 
  constructor: (@name, @age) ->
    person.prototype.instantiated = true

if person.prototype.instantiated
  alert "yes!"
else
  alert "no"

【讨论】:

  • 我收到此错误:未捕获的类型错误:无法读取未定义的属性“实例化”
  • 克拉托尼卡你是对的。这是我在更大项目中的代码的问题。谢谢=)
  • 您不能在person 函数上附加一个布尔属性吗?它需要在原型上吗?
【解决方案2】:

与上面的答案相同,但语法更像咖啡脚本:

class person 
  constructor: (@name, @age) -> person::instantiated = yes

bob = new person "bob", 11

if person::instantiated
  alert "yes!"
else
  alert "no"

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多