在JavaScript中如何为已有Person父类实例创建DD子类实例?
解决方法
首先你的类继承代码存在问题:ES6子类构造函数必须调用super()来初始化父类的this,否则会抛出错误。先修正类的定义:
class Person{ constructor(name){ this.name = name; } } class Financial extends Person{ // 新增name参数,传递给父类构造函数 constructor(name, salary){ super(name); this.salary = salary; } } // demand and debt class class DD extends Financial{ // 新增name、salary参数,传递给父类Financial constructor(name, salary, amount){ super(name, salary); this.amount = amount; } } let jack = new Person('jack');
基于已有的jack实例创建DD实例,有两种可行方式:
- 推荐方式:提取实例属性,传入DD构造函数
因为jack是Person实例,仅包含name属性,创建DD实例时需要补充业务所需的salary(收入)和amount(收支金额):
// 根据jack的name创建DD实例,salary和amount按实际业务赋值 const jackDD = new DD(jack.name, 8000, 1500);
- 不推荐方式:修改原实例的原型链
直接将jack的原型改为DD的原型,再补充缺失的属性。这种方式会修改原实例的类型,可能影响依赖Person实例的其他代码:
// 修改jack的原型链,使其成为DD实例 Object.setPrototypeOf(jack, DD.prototype); // 补充Financial和DD类的属性 jack.salary = 8000; jack.amount = 1500;
内容的提问来源于stack exchange,提问作者Mostafa Saleh
相关产品推荐
相关产品推荐

