接口式面向對象最有用的工具之一。GoF在《設計模式》一書中提出的可重用面向對象設計的第一條原則就說到:“針對接口編程而不是實現編程”。
但是JS沒有內置的創建或者實現接口的方法,也沒有內置的方法可以用於判斷一個對象是否實現了與另一個對象相同的一套方法。好在JS的靈活性,可以進行添加這些特性。
什麼是接口
接口提供了一種用以說明一個對象應該具有哪些方法的手段。儘管它可以表明或者暗示這些方法的語義,但並不規定這些方法應該如何實現。
接口的好處
- 具有自我描述性
- 促進代碼的重用
接口的缺點
- 降低了語言的靈活性
- JS並沒有提供接口的內置支持,模仿其他語言內置的功能總會有一些風險
- JS種任何實現接口的方法都會對性能造成一些影響,在某種程度上這得歸咎於額外的方法調用的開銷
- 接口使用中的最大問題在於,無法強迫其他程序員遵守你定義的接口。
在JS中模仿接口
用註釋描述接口
最簡單的方法,效果也是最差的。
/*
* interface Perople {
* function eat();
* function run();
* function sleep();
* }
/
var student = function(){};
student.prototype.eat() = function(){};
student.prototype.run() = function(){};
......
用屬性檢查模仿接口
所有類都明確地聲明自己實現了哪些接口。