
















1)抽象类和虚函数.
虚函数类成员中的概念,是只做了一个声明而未实现的方法,具有虚函数的类就称为抽象类,这些虚函数在派生类中才被实现.
抽像类是不能实例化的,因为其中的虚函数并不是一个完整的函数,不能被调用.所以抽象类只作为基类派生以后再使用.
和类的继承一样,JavaScript并没有任何机制用于支持抽象类。但利用JavaScript语言本身的性质,可以实现自己的抽象类.
2)在JavaScript实现抽象类
在传统的面向对象语言中,抽象类中的虚方法必须先被声明,但可以在其方法中被调用.
而在JavaScript中,虚方法就可以看作该类中没有定义的方法,但已经通过this指针使用了.和传统面向对象不同的是,这里的虚方法不需经过声明,而直接使用了.这些方法将在派生类中实现,例如:
//定义一个抽象基类base,无构造函数
function base(){};
base.prototype = {
initialize:function(){
this.oninit(); //调用了一个虚方法
}
}
//定义class1
function class1(){
//构造函数
}
//让class1继承于base,并实现其中的oninit方法
class1.prototype = (new base()).extend({
oninit:function(){//实现抽象基类中的oninit
}
});
//定义一个抽象基类base,无构造函数
function base(){}
base.prototype={
initialize:function(){
this.oninit(); //调用了一个虚方法
},
oninit:function(){} //虚方法是一个空方法,由派生类实现
}
//Class是一个全局无类型对象,有一个方法create,用于返回一个类
var Class = {
create:function(){
this.initialize.apply(this,arguments);
}
}
function(){
this.initialize.apply(this, arguments);
}
这个函数也是一个类的构造函数,当new这个类时便会得到执行.它调用了一个 initialize方法,从名字来看,是类的构造函数.而从类的角度来看,它是一个虚方法,是未定义的.但这个虚方法的实现并不是在派生类中实现的,而 是创建完一个类后,在
prototype中定义的,例如prototype可以这样写:
var class1=Class.create();
class1.prototype={
initialize:function(userName){
alert(“hello,”+userName);
}
}
function(){
this.initialize.apply(this, arguments);
}
这里的arguments是function()中所传进来的参数,也就是new class1(args)中传递进来的args,现在要把args传递给initialize,巧妙的使用了函数的apply方法,注意不能写成:
this.initialize(arguments);
这是将argumnets数组作为一个参数传递给initialize方法,而apply方法则可以把arguments数组对象的元素作为一组参数传递过去,这是一种巧妙的实现.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。