对象的规范,约束对象的成员/功能;
实现多态的方式;
通过接口,间接调用其派生类(对象)的成员与方法,以实现多态;
一般数组中必须是相同类型的对象;但通过接口(指向其派生类型),可以实现数组中存放不同类型的对象(虽说不同,但都是同一接口的子类或孙子类);
接口是一种功能的声明,一种强性的规范,一种功能的标准定义。
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, 33
Object.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'])
}