为什么Javascript类引用相同的构造函数?

变色

我试图在类上反映一个javascript对象,但是由于某种原因,似乎所有javascript类的构造函数都指向内存中的同一引用对象。这意味着我无法在2个单独的javascript类上反映2个不同的对象,因为第一个只是被第二个覆盖。

require('reflect-metadata');

class Class1 {}

class Class2 {}

class Sub1 {}

class Sub2 {}

Reflect.defineMetadata("METADATA", Sub1, Class1.constructor);
Reflect.defineMetadata("METADATA", Sub2, Class2.constructor);

console.log(Class1.constructor === Class2.constructor); // true
console.log(Reflect.getMetadata('METADATA', Class1.constructor)) // [Function: Sub2]

const cls1 = new Class1();
const cls2 = new Class2();

Reflect.defineMetadata("METADATA", Sub1, cls1.constructor);
Reflect.defineMetadata("METADATA", Sub2, cls2.constructor);

console.log(cls1.constructor === cls2.constructor); // false
console.log(Reflect.getMetadata('METADATA', cls1.constructor)) // [Function: Sub1]

我试图理解为什么非实例JavaScript对象似乎指向内存中的相同位置并引用相同的基本构造函数

jfriend00

我试图理解为什么非实例JavaScript对象似乎指向内存中的相同位置并引用相同的基本构造函数

类名是构造函数本身。因此,如果您想要对每个类的构造函数的唯一引用,请使用类名称本身。

另一方面,Class1是一个已经构造的Function对象,因此Class1.constructor也是该Function对象的构造函数Class2.constructor,因此它们每个都指向相同的Function对象构造函数。这就是为什么:

Class1.constructor === Class2.constructor
Class1.constructor === Function.prototype.constructor
function f() {}
Class1.constructor === f.constructor

如果要使用构造函数Class1,则可以使用Class1引用Class1.prototype.constructor,而不使用Class1.constructor

因此,您会发现:

Class1 !== Class2
Class1 === Class1.prototype.constructor
Class1.prototype.constructor !== Class2.prototype.constructor

为什么Javascript类引用相同的构造函数?

因为Class1.constructor是已经构造的Class1Function对象的构造函数,而不是您的类的构造函数。您的类的构造函数为Class1Class1.prototype.constructor

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在构造函数中,为什么在执行超类构造函数之前不能引用当前类的字段?

来自分类Dev

当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?

来自分类Dev

为什么我可以使用int构造函数将int绑定到类的引用?

来自分类Dev

Kotlin:为什么“未解析的引用”是密封类的子类的构造函数参数

来自分类Dev

为什么使用声明生成的构造函数具有与基类相同的访问级别?

来自分类Dev

为什么使用声明生成的构造函数具有与基类相同的访问级别?

来自分类Dev

在Javascript中,为什么应将具有引用类型的实例变量放入构造函数中?

来自分类Dev

为什么className.proptotype.constructor = newConstructor()不会更改Javascript类的构造函数?

来自分类Dev

javascript什么时候引用构造函数中使用的函数?

来自分类Dev

javascript什么时候引用构造函数中使用的函数?

来自分类Dev

为什么复制构造函数的参数是引用而不是指针?

来自分类Dev

为什么要在构造函数中使用对const的引用?

来自分类Dev

为什么复制构造函数的参数是引用而不是指针?

来自分类Dev

为什么原型的构造函数会引用回自身?

来自分类Dev

为什么在构造函数之前调用类的成员方法

来自分类Dev

Android:为什么Color类具有公共构造函数?

来自分类Dev

为什么不调用基类中的静态构造函数?

来自分类Dev

为什么C ++不使用父类构造函数?

来自分类Dev

为什么在构造时调用C ++类的析构函数?

来自分类Dev

为什么抽象类可以有构造函数?

来自分类Dev

为什么Calendar类没有公共构造函数?

来自分类Dev

为什么不调用实现Runnable接口的类的构造函数?

来自分类Dev

为什么必须调用基类构造函数?

来自分类Dev

为什么不调用实现Runnable接口的类的构造函数?

来自分类Dev

为什么在构造时调用C ++类的析构函数?

来自分类Dev

为什么构造函数需要在类的后面精确命名?

来自分类Dev

为什么我的类字段在构造函数中被破坏

来自分类Dev

基类构造函数为什么不设置值?

来自分类Dev

为什么没有调用 Cups 类的构造函数?

Related 相关文章

  1. 1

    在构造函数中,为什么在执行超类构造函数之前不能引用当前类的字段?

  2. 2

    当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?

  3. 3

    为什么我可以使用int构造函数将int绑定到类的引用?

  4. 4

    Kotlin:为什么“未解析的引用”是密封类的子类的构造函数参数

  5. 5

    为什么使用声明生成的构造函数具有与基类相同的访问级别?

  6. 6

    为什么使用声明生成的构造函数具有与基类相同的访问级别?

  7. 7

    在Javascript中,为什么应将具有引用类型的实例变量放入构造函数中?

  8. 8

    为什么className.proptotype.constructor = newConstructor()不会更改Javascript类的构造函数?

  9. 9

    javascript什么时候引用构造函数中使用的函数?

  10. 10

    javascript什么时候引用构造函数中使用的函数?

  11. 11

    为什么复制构造函数的参数是引用而不是指针?

  12. 12

    为什么要在构造函数中使用对const的引用?

  13. 13

    为什么复制构造函数的参数是引用而不是指针?

  14. 14

    为什么原型的构造函数会引用回自身?

  15. 15

    为什么在构造函数之前调用类的成员方法

  16. 16

    Android:为什么Color类具有公共构造函数?

  17. 17

    为什么不调用基类中的静态构造函数?

  18. 18

    为什么C ++不使用父类构造函数?

  19. 19

    为什么在构造时调用C ++类的析构函数?

  20. 20

    为什么抽象类可以有构造函数?

  21. 21

    为什么Calendar类没有公共构造函数?

  22. 22

    为什么不调用实现Runnable接口的类的构造函数?

  23. 23

    为什么必须调用基类构造函数?

  24. 24

    为什么不调用实现Runnable接口的类的构造函数?

  25. 25

    为什么在构造时调用C ++类的析构函数?

  26. 26

    为什么构造函数需要在类的后面精确命名?

  27. 27

    为什么我的类字段在构造函数中被破坏

  28. 28

    基类构造函数为什么不设置值?

  29. 29

    为什么没有调用 Cups 类的构造函数?

热门标签

归档