创建一个类,该类使用es6类语法将Function对象创建为实例

Create a class that creates Function objects as instance using es6 class syntax

本文关键字:创建 es6 语法 Function 实例 对象 一个      更新时间:2023-09-26

是否可以创建一个类,用原型上的方法实例化函数?我正在尝试将代码从原型结构转换为使用es6类语法。这里是一个人为的和过度简化的起点的例子

function createFun(init) {
  function fun(newDats) {
    this.data = newDats;
    // create universe
  }
  function internalMethod() {
  }
  fun.data = init;
  fun.aMethod = function () {
    internalMethod();
  }
  assign(fun, AnExtendableClass.prototype);
  return fun;
}
// and can be used as such
fun = createFun('first');
fun('second');
fun.aMethod();
fun.methodFromExtendableClass('third')

这就是我尝试过的

class Fun extend AnExtendableClass {
   constructor(init) {
     super();
     this.data = init;
     function fun(newDats) {
       this.data = newDatas;
       //create universe
     }
     assign(fun, this);
     return fun;
   }
   aMethod() {
   }
}

不幸的是,在没有返回任何方法的情况下,这是不起作用的。

有可能创建一个类,用原型上的方法实例化函数吗?

是的,使用ES6可以将Function子类化——然而,这并不完全好,因为构造函数需要代码字符串:

class Fun {
    constructor() {
        super("newDats", `
            this.data = newDats;
            // create universe
        `)
    }
    data() { }
    aMethod() { }
}
let fun = new Fun;
fun(…);
fun.aMethod(…);

我正在尝试将代码从原型结构转换为使用es6类语法。这里是一个人为的和过度简化的起点的例子

不要使用class语法。新语法非常有限,应该只用于标准类声明。如果你做了任何奇怪的事情——从构造函数返回函数、从其他类复制方法、分配静态属性和使用内部方法在这方面肯定很奇怪——那么就用"旧的"显式方法吧。新的Reflect.setPrototypeOf在这里给了你更多的自由。