我已经为行为抽象了一堆代码,现在当我这样做时:
class B extends A with behave {
B():super(){}
}
class A extends PolymerElement{
A(){}
}
abstract class behave {
test(){ print("Test"); }
}
所以我一直在努力创建一个工作流,而不必附加对这个新功能测试的引用
截至目前,如果您在A或B中实施测试,它将覆盖我创建的行为。但是我希望能更多地添加它,类似于:
class B extends A with behave {
B():super(){}
test():super.test(){}
}
这会像调用父测试一样。现在看这个时,我会说,如果行为在父母身上,这将是有意义的。所以让我们测试一下。
abstract class behave { ... }
class A extends behave { ... }
class B extends A {
test(){
super.test();
}
}
这可以工作并执行我想要做的事情......为什么我不能在实例化中引用它? test():super.test(){ ... }
看起来像刚才所说的那样会将错误视为构造函数错误。
现在如果我们把它放回原来的设计,就像B
一样abstract class behave { ... }
class A { ... }
class B extends A with behave {
test(){
super.test();
print("Foo");
}
}
现在它似乎按预期工作,要求我们创建对此行为的超级引用。
是否有使用:
引用父函数调用的想法,或者这只是用于构造函数?我会说,是的它现在仅用于构造函数,但为什么不添加其他功能。如果我想在模仿子实现的行为中创建一系列函数,我应该在函数底部的顶部运行super.test()
,具体取决于函数所需的顺序?
在阅读文档时,我在飞镖中是否遗漏了某些东西,或者这是假设暂时工作的方式?
答案 0 :(得分:1)
我怀疑将foo() : super.foo()
语法添加到该语言中。构造函数初始值设定项的:
非常有用,因为可以在编译时分析初始值设定项,这样可以很容易地验证是否为实例设置了最终字段。函数中的:
语法只是将函数调用放在函数开头的语法糖,这似乎不会增加很多值。
顺便说一下,您可以将@mustCallSuper
添加到test()
功能中。这将在linter中添加一个检查,覆盖test()
的所有方法都必须调用super.test()
。