为什么在JavaScript类A中instanceof函数,而typeof类A不是对象?

为什么在JavaScript类A中instanceof函数,而typeof类A不是对象?,javascript,types,Javascript,Types,当我们说“实例”时,我们假设我们正在处理一个对象。为什么JavaScript的操作符instanceof在我们询问(类A{})函数的instanceof时返回true,但是typeof(类A{})==“函数”?为什么不对象 当我们询问函数的(类A{})instanceof时,为什么JavaScript的操作符instanceof返回true classes只是构造函数的语法糖。也就是说,class A{}的求值产生一个函数 以下两个示例(或多或少)是等效的,即它们产生相同的结果/值: // cl

当我们说“实例”时,我们假设我们正在处理一个对象。为什么JavaScript的操作符
instanceof
在我们询问
(类A{})函数的instanceof
时返回
true
,但是
typeof(类A{})==“函数”
?为什么不
对象

当我们询问函数的
(类A{})instanceof时,为什么JavaScript的操作符
instanceof
返回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中,所有非原语值(字符串、数字、布尔值、null、未定义、符号)都是对象。函数也是对象,具有特殊的内部属性,使其可调用(和/或可构造)


为什么不反对呢

typeof
返回函数值的字符串
“function”
,因为规范中就是这样定义的

当我们询问函数的
(类A{})instanceof时,为什么JavaScript的操作符
instanceof
返回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中,所有非原语值(字符串、数字、布尔值、null、未定义、符号)都是对象。函数也是对象,具有特殊的内部属性,使其可调用(和/或可构造)


为什么不反对呢


typeof
返回函数值的字符串
“function”
,因为规范中就是这样定义的。

您正在处理一个对象。函数是Javascript中的对象。为什么函数的实例有一种“函数”类型令人惊讶?在我看来,这将是一个重要的类型区别。@ktretyak语法在
的实际功能中具有极大的误导性。这是我不喜欢使用它的原因之一。JavaScript从来没有,现在仍然没有基于类的面向对象编程。只有假设其他语言的语义,语法才是真正的误导,这从来不是明智之举。@4castle:如果你认为语法是表达意图的一种方式,那么你对类的负面感可能会减少。希望一种语言的发展能使表达意图变得更容易。还可以考虑数组文字是误导性的,因为它们实际上创建对象。但它比使用对象文字(加上其他优点,如
length
)更好地表达意图。或者想想IIFEs vs
let
。习惯新事物并将它们正确地放在你的语言思维模式中(至少对我来说是这样),可能只是时间问题。你正在处理一个对象。函数是Javascript中的对象。为什么函数的实例有一种“函数”类型令人惊讶?在我看来,这将是一个重要的类型区别。@ktretyak语法在
的实际功能中具有极大的误导性。这是我不喜欢使用它的原因之一。JavaScript从来没有,现在仍然没有基于类的面向对象编程。只有假设其他语言的语义,语法才是真正的误导,这从来不是明智之举。@4castle:如果你认为语法是表达意图的一种方式,那么你对类的负面感可能会减少。希望一种语言的发展能使表达意图变得更容易。还可以考虑数组文字是误导性的,因为它们实际上创建对象。但它比使用对象文字(加上其他优点,如
length
)更好地表达意图。或者想想IIFEs vs
let
。习惯新事物并将它们恰当地放在你的语言思维模式中可能只是时间问题(至少对我来说是这样)。