为什么在JavaScript类中有一个instanceof Function,但是typeof类不是一个对象?

时间:2017-02-07 21:48:25

标签: javascript types

当我们说""的实例时,我们假设我们正在处理一个对象。当我们问instanceoftrue时,为什么JavaScript的运算符(class A { }) instanceof Function会返回typeof (class A { }) == "function"?为什么不object

1 个答案:

答案 0 :(得分:5)

  

当我们询问instanceof

时,为什么JavaScript的运算符(class A { }) instanceof Function会返回true

class es只是构造函数的语法糖。即class A {}的评估会产生一种功能。

以下两个例子(或多或少)是等价的,即它们产生相同的结果/值:

// class
class A {
  constructor() {
    this.foo = 42;
  }

  bar() {
    console.log(this.foo);
  }
}

// constructor function
function A() {
  this.foo = 42;
}

A.prototype.bar = function() {
  console.log(this.foo);
}

所有非原始值(字符串,数字,布尔值,空值,未定义,符号)都是JavaScript中的对象。函数也是对象,具有特殊的内部属性,使它们可调用(和/或可构造)。

  

为什么不反对?

typeof返回函数值的字符串"function",因为它是如何在规范中定义的。