1

我正在尝试创建一个扩展的类Function

var MyClass = class MyClass extends Function {
  constructor(func, /*some other things*/) {
    //this is not defined in extended classes for some reason
    var newThis = func;
    //assign other stuff to newThis
    return newThis;
  }

  //methods

}

起初我认为这会起作用,但instanceof检查显示创建的对象只是一个常规函数,没有我的任何方法或属性。所以后来我意识到我需要使用super关键字constructFunction.

var newThis = super(func.toString().split('(')[1].split(')')[0].split(','),
                    func.toString().split('{')[1].split('}')[0])

这可行,但它不符合内容安全策略(类似的东西),这意味着它在 chrome 应用程序中不起作用。

4

1 回答 1

0

我不是你想要做的 100%,但为了正确扩展 ES6 中的类,你必须super()在做任何事情之前调用。

class Foo extends Function {

  constructor(){
    super();
    this.x = 'foo';
  }

}

let test= new Foo();
console.log(test.x); // 'foo'

你可以在这里的 babel REPL 上试试

于 2016-01-12T04:59:46.810 回答