Определите класс, который расширяет функцию

Я пытаюсь создать класс, который расширяет 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 ключевое слово для construct Function,

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

Это работает, но не соответствует политике безопасности контента (что-то подобное), что означает, что он не будет работать в приложениях Chrome.

1 ответ

Решение

Я не на 100% то, что вы пытаетесь сделать, но чтобы правильно расширить класс в ES6, вы должны позвонить super() прежде чем что-то делать.

class Foo extends Function {

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

}

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

Вы можете попробовать это на Babel REPL здесь

Другие вопросы по тегам