【问题标题】:How to check target is "class" or not in javascript如何在javascript中检查目标是否为“类”
【发布时间】:2018-07-05 16:27:11
【问题描述】:

自 ECMAScript 2015 起,jvascript 开始支持类声明。 但是没有办法区分“类声明”和“函数声明”。

class yesClass {
  //It is possible to omit defining constructor
  constructor () {}
}
typeof yesClss; //"function"
yesClss instanceof Function; //true
yesClss instanceof Object; //true
yesClass.constructor.name; //"Function"

没有办法区分吗?

【问题讨论】:

标签: javascript class typeof


【解决方案1】:

在 javascript 中,类声明需要“new”操作符来使用构造函数,该构造函数存在与否。所以调用没有'new'操作符的类会发生TypeError。

class yesClass {}
yesClass();
//Uncaught TypeError: Class constructor yesClass cannot be invoked without 'new'

这个“TypeError”可以用“try ... catch ...”捕获,如下所示:

try {
  yesClass();
} catch ( e ) {
  //Case of user-defined class, "Class constructor ..."
  //Case of native function which behaves like class, Document, "Failed to construct ..."
  console.log( e.message.match( /^Class constructor/ ) !== null || e.message.match( /^Failed to construct/ ) !== null );
}

标题代码让你知道是不是“类声明”。

在 REAL 类声明中指定的另一种简单且有限的方法是使用 toString 方法。当target为自定义类时,toString方法的结果以“class”开头。

yesClass.toString();
//"class yesClass {}"

Object 在 javascript 中具有最高层次结构,toString 方法是 Object 的方法。因此 javascript 中的每个对象都有 toString 方法,除了一些本地对象和手动删除的对象。

测试“JS Bin”存档以测试标题上下文。 在下面的链接中,我编写了一个名为“isClass”的函数。 此函数返回布尔值或对象,因参数而异。 https://jsbin.com/tekeyu/edit?js,console

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2014-01-10
    • 2021-07-13
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多