对象的规范,约束对象的成员/功能;
    实现多态的方式;
    通过接口,间接调用其派生类(对象)的成员与方法,以实现多态;

    一般数组中必须是相同类型的对象;但通过接口(指向其派生类型),可以实现数组中存放不同类型的对象(虽说不同,但都是同一接口的子类或孙子类);

    接口是一种功能的声明,一种强性的规范,一种功能的标准定义。

    JS 是一种弱类型的语言,业务项目中对接口的使用并不多见(除非是使用 TypeScript 或 强调 OOP 的 JS 代码)。

    但在 JS 语言层面,对接口的使用也有一些体现,如:

    JS 中很多对象都可以使用 for … of 遍历,如 Array / String / Map / Set 等。

    他们有什么共同特征呢 — 都实现了 Symbol.iterator 方法。

    那么任何对象只要实现了 Symbol.iterator 方法,就可以被 for … of 遍历。如:

    1. const iterable1 = new Object();
    2. iterable1[Symbol.iterator] = function* () {
    3. yield 11;
    4. yield 22;
    5. yield 33;
    6. };
    7. for(var item of iterable1) {
    8. console.log(item)
    9. }
    10. // 11, 22, 33
    11. Object.prototype[Symbol.iterator] = function* () {
    12. let keys = Object.keys(this), i = 0;
    13. for(; i<keys.length; i++){
    14. let key = keys[i]
    15. yield {
    16. key: key,
    17. value: this[key]
    18. }
    19. }
    20. }
    21. let testObj = {
    22. num: 100,
    23. str: '200',
    24. fn: function(){}
    25. }
    26. for(var item of testObj) {
    27. console.log(item['key'], item['value'])
    28. }