定义一个扩展 Function 的 class
Define a class that extends Function
我正在尝试创建一个扩展 Function
的 class。
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 应用程序中运行。
我不是 100% 想做的事情,但为了在 ES6 中正确扩展 class,你必须在做任何事情之前调用 super()
。
class Foo extends Function {
constructor(){
super();
this.x = 'foo';
}
}
let test= new Foo();
console.log(test.x); // 'foo'
你可以在 babel REPL 上试用 here
我正在尝试创建一个扩展 Function
的 class。
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 应用程序中运行。
我不是 100% 想做的事情,但为了在 ES6 中正确扩展 class,你必须在做任何事情之前调用 super()
。
class Foo extends Function {
constructor(){
super();
this.x = 'foo';
}
}
let test= new Foo();
console.log(test.x); // 'foo'
你可以在 babel REPL 上试用 here