以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
53. 用es5实现`extends`

解题思路:

  1. 创建一个新函数,使用 superType 构造函数初始化 this
  2. 设置新函数的 prototype 为 superType.prototype
  3. 将 SubType.prototype 继承到新函数的 prototype 上,确保新函数拥有 SubType 的方法和属性
  4. 将 constructor 设为 SubType,确保可以通过 new 调用 SubType 的 constructor

具体代码实现如下:

function myExtends(superType, subtype) {  function newType() {    superType.apply(this, arguments);    subtype.apply(this, arguments);  }  Object.setPrototypeOf(newType.prototype, superType.prototype);  Object.getOwnPropertyNames(subtype.prototype).forEach((prop) => {    newType.prototype[prop] = subtype.prototype[prop];  });  newType.prototype.constructor = subtype;  return newType;}

测试代码:

const InheritedSubType = myExtends(SuperType, SubType);const instance = new InheritedSubType('test');console.log(instance.name); // testconsole.log(instance.from); // subconsole.log(instance.forSuper); // [1, 2]console.log(instance.forSub); // [3, 4]instance.method(); // SubType methodinstance.subMethod(); // SubType subMethodinstance.superMethod(); // SuperType superMethodconsole.log(InheritedSubType.staticSuper); // staticSuperconsole.log(InheritedSubType.staticSub); // undefined