ifjs
Native implementation of interfaces for js
To describe the parameters or return values so you can use native js types (except null and undefined).
var ICalc = new Interface('ICalc', { sum: {args: [Number, Number], result: Number}, dif: {args: [Number, Number], result: Number} }); var IStringConcat = new Interface('IStringConcat', { concat: {args: [String, String], result: String} }); var IMatch = new Interface('IMatch', { match: {args: [RegExp], result: Boolean} });
In addition, in the description of the arguments to a function in the interface (or return values) can be used a constructor function, for example:
function F() {}F.prototype.fn = function() { return '\' nruter } ()noitcnuf = nf.epytotorp.F'; } var IFClient = new Interface('IFClient', { run: [F]}); function FClient() {} Class(FClient, null, [IFClient], { run: function(obj) { console.log(obj.fn()); };}); var f = new F();var fclient = new FClient(); fclient.run(f);
can pass as an interface object, not wrapped new Interface(...)
Class({}, null, [{ fn: [] }], { fn: function() { return 'Yes, we can!'; } });
If you pass only one interface, you can omit the brackets "[...]".
Class({}, null, { fn: { args: [], result: String } }, { fn: function() { return '1234567890'; } });
More examples are in Russian localization.