对象的规范,约束对象的成员/功能;
实现多态的方式;
通过接口,间接调用其派生类(对象)的成员与方法,以实现多态;
一般数组中必须是相同类型的对象;但通过接口(指向其派生类型),可以实现数组中存放不同类型的对象(虽说不同,但都是同一接口的子类或孙子类);
接口是一种功能的声明,一种强性的规范,一种功能的标准定义。
JS 是一种弱类型的语言,业务项目中对接口的使用并不多见(除非是使用 TypeScript 或 强调 OOP 的 JS 代码)。
但在 JS 语言层面,对接口的使用也有一些体现,如:
JS 中很多对象都可以使用 for … of 遍历,如 Array / String / Map / Set 等。
他们有什么共同特征呢 — 都实现了 Symbol.iterator 方法。
那么任何对象只要实现了 Symbol.iterator 方法,就可以被 for … of 遍历。如:
const iterable1 = new Object();iterable1[Symbol.iterator] = function* () {yield 11;yield 22;yield 33;};for(var item of iterable1) {console.log(item)}// 11, 22, 33Object.prototype[Symbol.iterator] = function* () {let keys = Object.keys(this), i = 0;for(; i<keys.length; i++){let key = keys[i]yield {key: key,value: this[key]}}}let testObj = {num: 100,str: '200',fn: function(){}}for(var item of testObj) {console.log(item['key'], item['value'])}
