面试题答案
一键面试// 定义商品基类
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
基类以及PhysicalProduct
和DigitalProduct
子类。在子类构造函数中通过Product.call(this,...)
调用父类构造函数初始化共同属性,避免属性重复。通过Object.create
创建原型对象来继承父类方法,提升性能,同时每个子类拥有自己特有的属性和方法。