类的对象:在同一个对象内使用extends引用另一个类
https://jsfiddle.net/jenqhg3o/1/
A = {
Foo: class {
},
Bar : class extends A.Foo {
constructor (){
console.log("test")
}
}
}
var a = new A.Bar()
这样扩展可行吗?我得到的是:A未定义。请帮忙。
谢谢
解决方案
由于JavaScript中缺乏时间旅行,这段代码根本做不到。你不能扩展一个当前还不存在、且正在与 extends 同时创建的类。
问题归结为试图使用当前正在被赋值的那个值:
foo = foo + 1;
这两个类的创建在执行时间上需要分开:
要么把它们分成独立的语句
const Foo = class {
}
A = {
Foo: Foo,
Bar : class extends Foo {
constructor (){
super()
console.log("test")
}
}
}
var a = new A.Bar();
或者通过将 class extends A.Foo 的求值延迟,直到 A.Foo 存在为止,这可以通过getter实现(在访问 A.Bar 时代码才运行)。
A = {
Foo: class {
},
get Bar(){
return class extends A.Foo {
constructor (){
super()
console.log("test")
}
}
}
}
var a = new A.Bar();
然而,最好的办法是根本不要尝试这个初始化。完全没必要在对象初始化器里把所有内容都做完。把类声明分开可以让代码更易读,且更不容易出错
class Foo {
}
class Bar extends Foo {
constructor (){
super()
console.log("test")
}
}
const A = { Foo, Bar };
var a = new A.Bar();
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。