说我有这两个:
SIC Code
我怎么知道class Foo {}
const Bar = function() {}
// Then somewhere I have an object:
const variable = Foo;
// OR
const variable = Bar;
是函数还是类?这里的问题是variable
或typeof Foo
都返回typeof Bar
。
答案 0 :(得分:0)
这个问题是由于最近添加的新型语法糖造成的混乱所致。
ECMAScript 2015中引入的JavaScript类主要是 JavaScript现有的基于原型的语法糖 遗产。类语法是不引入新的面向对象 继承模型到JavaScript [...]
类实际上是#34;特殊functions",正如您可以定义的那样 类语法有function expressions和function declarations 两个组件:class expressions和class 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不同)。