继承:继承提供了类级别代码复用, 通过继承获得基类的数据, 使得你有能力在已有代码基础上开发而不是从头再写一遍或者copy。我的理解是抽象出的事物本来就是应该互相有联系的,我们可以类来描述抽象的事物,用对象来描述具象的事物,但是这些都是独立的,这就不符合现实的逻辑,所以我们需要继承,让事物之间的联系得到描述。简单的例子:制造液晶显示器的人,一开始并不是直接制造出液晶显示器,而是先造球面的,后来才演变发展为液晶显示器,他们都有显示画面的作用都有电源开关,可能内部构造不太一样,但是还是继承了大部分的属性。
在JS里继承让我们可以将代码写的很优雅,而不是独立的每个FUNCTION去描述,看下面的代码:
/*oop中的继承在javascript中的应用 man类为本演示的基本类 具有姓名、年龄、职业三个属性 */ var man = function(){ /*定义私有变量*/ var name = "张三";/*默认nane值*/ var age = 25; /*默认age值*/ var business = "web bulider";/*默认职业值*/ /*获得name方法*/ this.getname = function(){ return name; }; /*name赋值方法*/ this.setname = function(mingzi){ name = mingzi; }; /*获得age方法*/ this.getage = function(){ return age; }; /*age赋值方法*/ this.setage= function(nianling){ age = nianling; }; /*获得business方法*/ this.getbusiness = function(){ return business; }; /*business赋值方法*/ this.setbusiness= function(zhiye){ business = zhiye; }; } /* manjob类,本演示的子类 将继承基类的性质 */ var manjob = function(){ /*定义私有变量*/ var page = "3个";/*做了多少个页面*/ var js = "10个"; /*做了多少个JS*/ var flash = "100个";/*做了多少个flash*/ var feel = "bad"; /*感觉如何*/ /*获得page方法*/ this.getpage = function(){ return page; }; /*page赋值方法*/ this.setpage = function(yemian){ page = yemian; }; /*获得js方法*/ this.getjs = function(){ return js; }; /*js赋值方法*/ this.setjs = function(jiaoben){ js = jiaoben; }; /*获得flash方法*/ this.getflash = function(){ return flash; }; /*flash赋值方法*/ this.setflash = function(donghua){ flash = donghua; }; /*获得feel方法*/ this.getfeel = function(){ return "心情很"+feel; }; /*feel赋值方法*/ this.setfeel = function(xinqing){ feel = xinqing; }; } /* 继承开始,用manjob的prototype方式呼叫 man类,继承man类的属性和方法 */ manjob.prototype = new man(); /*实例化*/ var mydate = new Date(); var tomie = new manjob();//实例化一个manjob /*赋值*/ tomie.setname("tomie");/*基类*/ tomie.setage(25);/*基类*/ tomie.setbusiness("前端开发");/*基类*/ tomie.setpage("20个");/*子类*/ tomie.setjs("200个");/*子类*/ tomie.setflash("10个");/*子类*/ tomie.setfeel("happy");/*子类*/ /*打印结果*/ alert("继承后返回的方法为:"+tomie.getname + tomie.getage + tomie.getbusiness + tomie.getpage + tomie.getjs + tomie.getflash + tomie.getfeel) alert(tomie.getname() +"年龄为"+ tomie.getage() +"岁,职业为"+ tomie.getbusiness() +",于"+(mydate.getMonth()+1)+"月完成了页面"+ tomie.getpage() +",脚本"+ tomie.getjs() +",动画"+ tomie.getflash() +","+ tomie.getfeel())