代码拉取完成,页面将自动刷新
Simple interfaces for modern JavaScript.
npm -i @webreflection/interface
There are two functions usable through Object
or any Function.prototype
:
Object.interface([iFace, ...iFace, ]{object: 'literal'})
to defines left to right interfaces properties on top of the newly created interfaceObject.implements(iFace[, ...iFace])
to create a new object that implements all interfaces (still left to right)Both methods can be also used to define classes:
Function.interface([iFace, ...iFace, ]class {})
to defines left to right classes implementing the optional list of previous interfaces as parametersclass extends AnyClass.implements(iFace[, ...iFace])
to create a new intermediate class that implements all interfaces (still left to right)null
object as prototypeLast point means that objects interfaces do not have toString methods or constructors. These are indeed meant to be used as interfaces only, not as generic objects.
// Function.prototype polluted, deal with it!
require('@webreflection/interface');
// an interface is just an object
// carrying some definition that can be implemented
// through other objects or classes
const EventListener = Object.interface({
handleEvent(e) { this['on' + e.type](e); }
});
// but it can be defined through a class too
// in such case you can even new EventListener
// or directly extends EventListener
const EventListener = Function.interface(class {
handleEvent(e) { this['on' + e.type](e); }
});
// a simple clicker class (it could directly extends EventListener too)
class Clicker {
constructor() { super(); this.clicks = 0; }
onclick(e) {
e.preventDefault();
console.log(`You clicked me ${++this.clicks} times`);
}
}
// a BasicClicker that extends Clicker and implements EventListener
class BasicClicker extends Clicker.implements(EventListener) {
constructor(node) {
super();
node.addEventListener('click', this);
}
}
new BasicClicker(document.documentElement);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。