JavaScript反射機制與繼承:概念

反射

反射機制是指程序能夠訪問、檢測和修改它自己狀態或行爲的一種能力。對於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的引用,HelloclassHellosubclass共享同一個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

相關文章
相關標籤/搜索