虽然与function
和prototype
相比,我们对es2016中的class
功能有点困惑,但它的行为在某些情况下是不同的,特别是 - 类不能被称为相同的功能,似乎没有办法找出函数是类构造函数还是简单的函数,而不使用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'
,但不能把它作为一个功能!尼斯。
这里是我的2个问题:
- 有一些方法我可以调用
Foo
构造函数一样Bar
与重写this
背景? - 有什么方法可以检测到
anyArg
是一个类的构造函数,因此我可以在我的doSmth
函数中以不同方式处理它。没有toString
和RegExp
(作为性能损失将是巨大的在这种情况下)。然后,我可以使用Reflect.construct
来初始化新实例,并使用Object.assign
来扩展我的obj
变量与来自实例的值。
谢谢,亚历克斯
FWIW,这听起来很疯狂,而我的)不知道到底是一个什么样接收和b)想强迫对象的构造类似。 – deceze
[如何区分箭头函数,类和普通函数?](http://stackoverflow.com/a/31947622/1048572) – Bergi