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

时间:2015-03-25 05:21:54

标签: javascript class ecmascript-6

是否可以创建一个使用方法原型实例化函数的类?我试图将代码从原型结构转换为使用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() {
   }
}

不幸的是,这不起作用,并且没有任何方法作为回报。

1 个答案:

答案 0 :(得分:1)

  

是否可以创建一个使用方法原型实例化函数的类?

是的,使用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在这里给你额外的自由。