面试题答案
一键面试设计继承体系
- 基类设计:首先定义一个基类,它包含一些通用的属性和方法,作为整个继承体系的基础。
- 子类继承:根据业务需求,定义多个子类继承自基类,子类可以重写基类的方法,也可以添加自己特有的属性和方法。
运用对象可扩展能力和原型链
- 对象可扩展能力:通过JavaScript的
Object.defineProperty
方法或者直接在对象上添加属性和方法来实现对象的动态扩展。在运行时,可以根据实际需求为对象添加新的功能。 - 原型链:利用原型链的特性,实现方法的复用。当访问一个对象的属性或方法时,如果对象本身没有该属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的顶端(
null
)。
核心代码实现
// 基类
function BaseClass() {
this.baseProperty = 'This is a base property';
}
BaseClass.prototype.baseMethod = function() {
console.log('This is a base method');
};
// 子类
function SubClass() {
// 调用父类构造函数
BaseClass.call(this);
this.subProperty = 'This is a sub property';
}
// 子类继承父类
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.constructor = SubClass;
// 子类扩展方法
SubClass.prototype.subMethod = function() {
console.log('This is a sub method');
};
// 动态添加功能
function addDynamicFunction(obj) {
obj.dynamicFunction = function() {
console.log('This is a dynamically added function');
};
}
// 使用示例
let subObj = new SubClass();
subObj.baseMethod();
subObj.subMethod();
// 动态添加功能
addDynamicFunction(subObj);
subObj.dynamicFunction();
上述代码中,首先定义了BaseClass
作为基类,包含一个属性和一个方法。然后SubClass
继承自BaseClass
,并添加了自己的属性和方法。最后通过addDynamicFunction
函数在运行时为对象动态添加了一个新的功能。