MST

星途 面试题库

面试题:JavaScript继承机制在复杂业务场景中的优化应用

假设现在有一个电商系统,存在商品基类`Product`,包含`id`、`name`、`price`等属性,以及获取价格的`getPrice`方法。有两个子类`PhysicalProduct`(实物商品,新增`weight`属性)和`DigitalProduct`(数字商品,新增`downloadUrl`属性)。请结合JavaScript的原型与继承机制,设计这几个类,要求考虑性能优化,避免不必要的属性和方法重复,并且子类能正确调用父类方法和拥有自己特有的属性与方法。
47.8万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
// 定义商品基类
function Product(id, name, price) {
    this.id = id;
    this.name = name;
    this.price = price;
}

Product.prototype.getPrice = function() {
    return this.price;
};

// 定义实物商品子类
function PhysicalProduct(id, name, price, weight) {
    // 借用父类构造函数初始化共同属性
    Product.call(this, id, name, price);
    this.weight = weight;
}
// 继承父类原型
PhysicalProduct.prototype = Object.create(Product.prototype);
PhysicalProduct.prototype.constructor = PhysicalProduct;

// 定义数字商品子类
function DigitalProduct(id, name, price, downloadUrl) {
    // 借用父类构造函数初始化共同属性
    Product.call(this, id, name, price);
    this.downloadUrl = downloadUrl;
}
// 继承父类原型
DigitalProduct.prototype = Object.create(Product.prototype);
DigitalProduct.prototype.constructor = DigitalProduct;

通过上述代码,使用JavaScript的原型链继承机制实现了Product基类以及PhysicalProductDigitalProduct子类。在子类构造函数中通过Product.call(this,...)调用父类构造函数初始化共同属性,避免属性重复。通过Object.create创建原型对象来继承父类方法,提升性能,同时每个子类拥有自己特有的属性和方法。