我对 es2016 中的功能有点困惑,尽管与andclass
相比,它被认为只是用于创建类的语法糖,但在某些情况下的行为是不同的,特别是 - 不能调用类与函数相同,似乎没有办法找出函数是类构造函数还是简单函数,而不使用和.function
prototype
toString
/^class/
RegExp
假设示例:
class Foo {
constructor () {
this.name = 'foo';
}
}
function Bar () {
this.name = 'bar';
}
function doSmth (anyArg) {
if (typeof anyArg === 'function') {
var obj = { someProp: 'qux' };
anyArg.call(obj);
return obj;
}
// ...
}
doSmth(Bar);
doSmth(Foo); // Class constructor Foo cannot be invoked without 'new'
是typeof 'function'
,但不能将其作为函数调用!好的。
这是我的两个问题:
- 有什么方法可以调用与覆盖上下文
Foo
相同的构造函数吗?Bar
this
- 有什么方法可以检测到
anyArg
类的构造函数,以便我可以在我的doSmth
函数中以不同的方式处理它。没有toString
andRegExp
(因为在这种情况下性能损失会很大)。然后我可以用它Reflect.construct
来初始化新实例,并用实例中的值Object.assign
扩展我的obj
变量。
谢谢你,亚历克斯