反射機制是指程序能夠訪問、檢測和修改它自己狀態或行爲的一種能力。對於JavaScript
,簡單來講,就是對類的成員進行修改等操做。javascript
js
能夠經過for(...in...)
來實現反射。java
JavaScript
中沒有專門的機制來實現類的繼承,但能夠經過複製一個類的prototype
到另一個類來實現繼承。函數
function Helloclass() { //構造函數 } function Hellosubclass() { //構造函數 } Hellosubclass.prototype = Helloclass.prototype; Hellosubclass.prototype.Propertys = "name"; Hellosubclass.prototype.Methods = function() { //方法示例代碼 } var obj = new Hellosubclass();
以上並不是嚴格的繼承,兩個類是同一prototype
的引用,Helloclass
與Hellosubclass
共享同一個prototype
,重寫一個類的成員或方法會影響另外一個。this
能夠利用反射機制繼承。利用for(...in...)
語句枚舉出全部基類prototype
成員,並將其賦值給prototype
對象。進一步,能夠爲每一個類添加一個共有的方法用來實現類的繼承:prototype
function.prototype.inherit=function(baseClass) { for(var p in baseClass.prototype) { this.prototype[p] = baseClass.prototype[p]; } }
能夠看出,所謂的反射機制,從簡單方面來說,就是對類中成員進行枚舉、修改等操做的能力。若是存在一種機制,在不知道某一個類中到底有什麼函數,或者成員變量的狀況下就能夠對其操做(例如,js
能夠對類成員進行枚舉),這種機制就能夠成爲反射。js
中沒有繼承機制,可是能夠對某一個類的成員經過反射機制「逐一複製」,而後再修改須要「覆蓋」的成員,就能夠達到「繼承」的效果。這也是反射機制的一個應用。code