反射
反射机制是指程序可以访问、检测和修改它本身状态或行为的一种能力。对于JavaScript
,简单来说,就是对类的成员进行修改等操作。
js
可以通过for(...in...)
来实现反射。
继承
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
,重写一个类的成员或方法会影响另一个。
可以利用反射机制继承。利用for(...in...)
语句枚举出所有基类prototype
成员,并将其赋值给prototype
对象。进一步,可以为每个类添加一个共有的方法用来实现类的继承:
function.prototype.inherit=function(baseClass)
{
for(var p in baseClass.prototype)
{
this.prototype[p] = baseClass.prototype[p];
}
}
可以看出,所谓的反射机制,从简单方面来讲,就是对类中成员进行枚举、修改等操作的能力。如果存在一种机制,在不知道某一个类中到底有什么函数,或者成员变量的情况下就可以对其操作(例如,js
可以对类成员进行枚举),这种机制就可以成为反射。js
中没有继承机制,但是可以对某一个类的成员通过反射机制“逐一复制”,然后再修改需要“覆盖”的成员,就可以达到“继承”的效果。这也是反射机制的一个应用。