与stampit 2

时间:2015-11-16 19:59:44

标签: javascript interface ecmascript-6 composition stampit.js

正如“编程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。它不是,我担心很难得到这样的东西,因为根本没有编译。

所以,我的问题是:我做错了还是埃里克·艾略特称之为“界面”的半成品?

1 个答案:

答案 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 } });