将类型分配给变量时的ES6 instanceof
ES6 instanceof when assigning a type to a variable
const Namespace = {
"FooFunction": () => {
class MyError extends Error {
constructor(message) {
super(message);
}
}
return {"MyError": MyError};
}
}
console.log((new (Namespace.FooFunction()).MyError("foo")) instanceof Namespace.FooFunction().MyError);
这会打印出错误。我正在寻找一种方法来对像这样的“存储在变量中的类型”使用 instanceof。我该怎么做 - 这可能吗?
每次调用 Namespace.FooFunction
,它都会创建一个新的 MyError
class,因此 Namespace.FooFunction().MyError == Namespace.FooFunction().MyError
永远不会为真。
如果您需要在函数中保留 MyError
class 声明,尽可能少地更改,我们可以将 FooFunction
转换为 IIFE,这允许每次调用时 return 相同 MyError
class:
const Namespace = {
"FooFunction": (() => {
class MyError extends Error {
constructor(message) {
super(message);
}
}
return (...arguments) => ({"MyError": MyError});
})()
}
console.log((new (Namespace.FooFunction()).MyError("foo")) instanceof Namespace.FooFunction().MyError);
当然,更好的选择是将 class 添加到 Namespace
对象本身:
const Namespace = {
"MyError": class MyError extends Error {
constructor(message) {
super(message);
}
},
"FooFunction": function() {
return {"MyError": this.MyError};
}
}
console.log((new (Namespace.FooFunction()).MyError("foo")) instanceof Namespace.FooFunction().MyError);
const Namespace = {
"FooFunction": () => {
class MyError extends Error {
constructor(message) {
super(message);
}
}
return {"MyError": MyError};
}
}
console.log((new (Namespace.FooFunction()).MyError("foo")) instanceof Namespace.FooFunction().MyError);
这会打印出错误。我正在寻找一种方法来对像这样的“存储在变量中的类型”使用 instanceof。我该怎么做 - 这可能吗?
每次调用 Namespace.FooFunction
,它都会创建一个新的 MyError
class,因此 Namespace.FooFunction().MyError == Namespace.FooFunction().MyError
永远不会为真。
如果您需要在函数中保留 MyError
class 声明,尽可能少地更改,我们可以将 FooFunction
转换为 IIFE,这允许每次调用时 return 相同 MyError
class:
const Namespace = {
"FooFunction": (() => {
class MyError extends Error {
constructor(message) {
super(message);
}
}
return (...arguments) => ({"MyError": MyError});
})()
}
console.log((new (Namespace.FooFunction()).MyError("foo")) instanceof Namespace.FooFunction().MyError);
当然,更好的选择是将 class 添加到 Namespace
对象本身:
const Namespace = {
"MyError": class MyError extends Error {
constructor(message) {
super(message);
}
},
"FooFunction": function() {
return {"MyError": this.MyError};
}
}
console.log((new (Namespace.FooFunction()).MyError("foo")) instanceof Namespace.FooFunction().MyError);