我正在尝试使用 ES6 类完成热代码重载。我需要能够修改类的构造函数,而不是用新的类替换它(因为其他人可能已经引用了它)。
但是,我发现类对象似乎具有一些内部引用指向最初定义的构造函数;使用 new 实例化类时,不会在类上查找 constructor 或 prototype.constructor。
例如:
但是,我发现类对象似乎具有一些内部引用指向最初定义的构造函数;使用 new 实例化类时,不会在类上查找 constructor 或 prototype.constructor。
例如:
class OldC { constructor() { console.log("old"); } }
class NewC { constructor() { console.log("new"); } }
OldC.prototype.constructor = NewC.prototype.constructor;
OldC.constructor = NewC.constructor;
new OldC();
---> "旧的"
(更新所有其他方法都可以正常工作;只有构造函数让我感到困扰。)
考虑到可能是通过[[prototype]]
找到了构造函数,我还添加了以下内容:
Object.setPrototypeOf(OldC, Object.getPrototypeOf(NewC));
Object.setPrototypeOf(OldC.prototype, Object.getPrototypeOf(NewC.prototype));
这也没有帮助(考虑到没有子类化发生,我也不会指望它有所帮助)。
尽管经过了这么多步骤,检查OldC后发现原型属性正如我所预期的那样,其中OldC.prototype.constructor
是新构造函数。但是,构造OldC的实例仍然调用原始构造函数。
到底发生了什么,我该如何解决?
.constructor
都是Function
。 - ziggy wiggy