MST

星途 面试题库

面试题:JavaScript 对象可扩展能力与原型链在复杂继承场景中的应用

假设有一个复杂的业务场景,需要实现多层级的对象继承关系,同时要利用对象的可扩展能力在运行时动态添加新的功能。请设计一个继承体系,并阐述如何在这个体系中运用对象可扩展能力和原型链来实现灵活的功能扩展与复用,最后给出核心代码实现。
29.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

设计继承体系

  1. 基类设计:首先定义一个基类,它包含一些通用的属性和方法,作为整个继承体系的基础。
  2. 子类继承:根据业务需求,定义多个子类继承自基类,子类可以重写基类的方法,也可以添加自己特有的属性和方法。

运用对象可扩展能力和原型链

  1. 对象可扩展能力:通过JavaScript的Object.defineProperty方法或者直接在对象上添加属性和方法来实现对象的动态扩展。在运行时,可以根据实际需求为对象添加新的功能。
  2. 原型链:利用原型链的特性,实现方法的复用。当访问一个对象的属性或方法时,如果对象本身没有该属性或方法,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函数在运行时为对象动态添加了一个新的功能。