2016-01-12 6 views
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 для construct a Function.

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

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

+0

Почему вы хотите продлить 'Function'? – Fresheyeball

+0

Поскольку я хочу создать функционально подобный класс, который имеет некоторые дополнительные методы и свойства –

+1

ха-ха. Добавление методов к функции. Это звучит немного глупо. –

ответ

0

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

class Foo extends Function { 

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

} 

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

Вы можете попробовать его на Вавилонскую РЕПЛ here

+0

Мне что-то не хватает. 'test' - это функция, которая определяется как и будет делать, когда вы ее назовете? –

+0

Я никогда не расширил функцию, поэтому я действительно не знаю. Я могу сказать вам, что функция является подклассом Object и имеет множество методов и свойств на своем прототипе для более подробной информации. См. [MDN] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) –

Смежные вопросы