如何确定对象是Javascript中的类还是函数

时间:2017-06-13 22:07:50

标签: javascript ecmascript-6

说我有这两个:

SIC Code

我怎么知道class Foo {} const Bar = function() {} // Then somewhere I have an object: const variable = Foo; // OR const variable = Bar; 是函数还是类?这里的问题是variabletypeof Foo都返回typeof Bar

1 个答案:

答案 0 :(得分:0)

这个问题是由于最近添加的新型语法糖造成的混乱所致。

来自MDN doc on Classes

  

ECMAScript 2015中引入的JavaScript类主要是   JavaScript现有的基于原型的语法糖   遗产。类语法是引入新的面向对象   继承模型到JavaScript   [...]
  类实际上是#34;特殊functions",正如您可以定义的那样   类语法有function expressionsfunction declarations   两个组件:class expressionsclass declarations

MDN doc on class expressions显示您对typeof

的了解
'use strict';
var Foo = class {}; // constructor property is optional
var Foo = class {}; // Re-declaration is allowed

typeof Foo; //returns "function"
typeof class {}; //returns "function"

Foo instanceof Object; // true
Foo instanceof Function; // true
class Foo {}; // Throws TypeError, doesn't allow re-declaration
  

但与类表达式不同,class declaration不允许使用   要再次声明的现有类,如果是,将抛出类型错误   尝试。
  [...]
  类声明不会被提升(与function declarations不同)。