正如“编程javascript应用程序”interface section中所述,您可以使用stampit实现接口。当减少示例中不必要的东西时,我最终得到类似的东西:
const fooBarInterface =
stampit()
.methods(
{
foo: () => {
throw new Error('connect not implemented');
},
bar: () => {
throw new Error('save not implemented');
}
}
)
摘自界面定义:
如果您的类声称实现了一个接口,那么所有方法都由 该接口必须在类之前出现在其源代码中 成功编译。
现在正在使用界面
const fooBarImplementation =
stampit()
.compose(fooBarInterface)
.methods(
{
foo: () => {
// implement me
}
}
}
)
现在,在从邮票中编写对象时,应该会出现错误,因为fooBarImplementation没有实现bar。它不是,我担心很难得到这样的东西,因为根本没有编译。
所以,我的问题是:我做错了还是埃里克·艾略特称之为“界面”的半成品?
答案 0 :(得分:0)
您创建的module非常棒!你真的很了解压力。
虽然在JavaScript中我会建议走另一条道路。即,检查方法是否存在。
java -Xmx100G -Xms100G Hello
完全删除if (obj.bar) kangaroo.bar();
。但是如果你需要在创建对象时检查方法存在,那么你应该像你的模块一样。
fooBarInterface
并使用它:
var ValidateFooBar = stampit()
.init(function() {
if (!_.isFunction(this.foo)) throw new Error('foo not implemented');
if (!_.isFunction(this.bar)) throw new Error('bar not implemented');
});
将抛出:const fooBarImplementation = stampit()
.compose(ValidateFooBar)
.methods({
foo: function() {
// implement me
}
});