一种将实例转移到JavaScript中另一个类的方法



我实际上是在练习使用new关键字创建类和实例,这想到了我的想法。

假设我有一个叫Customers的超类,并且我有两个子类别是newCustomersspecialCustomers

假设我有一个名为bob ==> var bob = new newCustomer();

的新客户

,我有一个名为Smith ==>>

的特殊客户
var smith = new specialCustomer();

我如何编写一种方法,当分配给鲍勃时,它将他从一个新的customer实例转移到了一个specialcustomer实例?

例如,我应该编写什么代码来完成此工作:

bob.moveToSpecial() //moves bob from being instance of newCust to specialCust

一个对象不是类的实例,一个对象具有基于构造函数的原型。

您可以做什么(尽管可能导致副作用)正在更改该对象的原型:

bob.__proto__ = specialCust.prototype;

在此处执行此操作时,请阅读有关警告:https://developer.mozilla.org/de/docs/web/javascript/reference/reference/global_objects/objects/object/proto

更好的方法是创建一个新对象并从鲍勃那里移动所有属性:

newBob = new specialCust();
for(var prop in bob){
    newBob[prop] = bob[prop];
}

请注意,在这两种情况下,鲍勃都从旧原型中失去了他的"继承"方法和属性,尽管在后一种情况下,只有一种不可衡量的情况(如评论中所述)。枚举的方法将直接复制并绑定到新对象,可能是覆盖的继承方法,因此也要意识到这一点。

也值得阅读:https://reinteractive.com/posts/235-es6-classes-and-javascript-protypes

[编辑]带有Object.keys的示例代码:

newBob = new specialCust();
Object.keys(bob).forEach(function(prop){
    newBob[prop] = bob[prop];
});

最新更新