JavaScript类的每个实例都有方法字节码的副本吗?

JavaScript类的每个实例都有方法字节码的副本吗?,javascript,Javascript,假设我实例化了这个类的100个副本 class Foo { bar() { // lots of lines of code } } 是所有100个副本都有bar()字节码的内存副本,还是有一个bar()的内存副本,并且所有实例都有指向它的函数指针?内存中只有一个bar的副本,通常也只有一个对它的引用 Foo的每个实例都有一个对其共享原型对象(Foo.prototype)的引用,该对象引用了bar每个bar方法的实例都将共享相同的引用,使用==操作符可以方便快捷地查看,例如:

假设我实例化了这个类的100个副本

class Foo {
  bar() {
    // lots of lines of code
  }
}

是所有100个副本都有bar()字节码的内存副本,还是有一个bar()的内存副本,并且所有实例都有指向它的函数指针?

内存中只有一个bar的副本,通常也只有一个对它的引用


Foo的每个实例都有一个对其共享原型对象(Foo.prototype)的引用,该对象引用了
bar

每个
bar
方法的实例都将共享相同的引用,使用
==
操作符可以方便快捷地查看,例如:

class Foo {
  bar() {
    // lots of lines of code
  }
}

const a = new Foo()
const b = new Foo()

console.log(a.bar === b.bar)
>>> true

JavaScript没有任何被称为字节码的东西。如果你正在实例化这个类,你就不会复制任何东西。实际上,仍然只有一个函数,
Foo.prototype.bar
。在闭包的上下文中,您的问题会更有趣,因为多个不同的函数对象具有相同的代码。这是正确的。
==
运算符是浅值比较运算符。除字符串和数字外,此运算符比较对象的地址。因此,当应用于两个函数时,它会比较两个函数所在的RAM中的地址。如果两个外观相似的函数位于不同的RAM地址,
=
运算符将返回false