一种在javascript中将实例移动到另一个类的方法

时间:2017-03-11 21:45:00

标签: javascript function class object instance

我实际上是在练习使用new关键字创建类及其实例,而这一点在我脑海中浮现。

假设我有一个名为Customers的超类,我有两个子类newCustomersspecialCustomers

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

我有一个名为smith ==>>的特殊客户

var smith = new specialCustomer();

如何编写一个方法,当它被分配给bob时,它会将他从newCustomer实例转移到specialCustomer实例?

例如,我应编写什么代码才能使其工作:

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

1 个答案:

答案 0 :(得分:1)

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

你能做什么(虽然它可能导致副作用)正在改变那个对象的原型:

bob.__proto__ = specialCust.prototype;

在此处执行此操作时,请阅读警告:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

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

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

请注意,在这两种情况下,bob都会丢失旧原型中的“继承”方法和属性,尽管在后一种情况下只有非可枚举的方法和属性(如评论中所述)。可枚举的将被复制并直接绑定到新对象,可能会覆盖继承的方法,所以也要注意这一点。

另外值得一读:https://reinteractive.com/posts/235-es6-classes-and-javascript-prototypes

[edit] Object.keys的示例代码:

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