本文实例讲述了JavaScript继承与聚合。分享给大家供大家参考,具体如下:
一、继承
第一种方式:类与被继承类直接耦合度高
1. 首先,准备一个可以被继承的类(父类),例如
//创建一个人员类function Person(name) {//现在Person里面的域是由Person里面的来this来控制的 this.name=name;}
2. 然后,有个需要继承父类的子类
function Teacher(name,books) { Person.call(this,name);//相当于java中的super函数 在new Teacher时将Person的name初始化 this.books=books;}
说明一下:
(1)call方法可以将一个函数的对象上下文从初始化变成由this来决定一个类去控制另一个类
(2)Teacher类去控制 Person类 用Teacher域里面的 this来控制Person域里面的 this
(3)调用 Perosn的构造函数,因为Perosn没有用 new 所以是个空对象(模板) 显示调用call方法,可以初始化 Person
3. 最后,实现继承
(步骤1)先继承
Teacher.prototype=new Person();Teacher.prototype.constructor=Teacher;//确保继承后任然是Teacher自己的构造函数
(步骤2)为子类扩展一些方法,用于访问从父类继承的内容
Teacher.prototype.getBook=function () { return this.name+" "+this.books;}
(步骤3)使用已经继承好的类
var jim=new Teacher("Jim","Javascript");alert(jim.getBook())
总结:此种方法是直接在子类中显示调用父类,耦合度高,复用性差。
第二种方式,使用封装,完成程序中所用继承操作
1. 首先,准备一个可以被继承的类(父类),例如
//创建一个人员类function Person(name) {//现在Person里面的域由Person里面的来this来控制的 this.name=name;}
2. 创建extend函数为了程序中所有的继承操作(最重要的地方)
/*创建extend函数为了程序中所有的继承操作*///subClass:子类 superClass:超类(2)function extend(subClass,superClass) { //1,使子类原型属性等于父类的原型属性 //初始化一个中间空对象,目的是为了转换主父关系 var F = function () {}; F.prototype = superClass.prototype; //2, 让子类继承F subClass.prototype = new F(); subClass.prototype.constructor = subClass; //3,为子类增加属性 superClass ==》原型链的引用 subClass.superClass = superClass.prototype; //4,增加一个保险,就算你的原型类是超类(Object)那么也要把你的构造函数级别降下来 【说明一些:这里只是其中一个简单的保险,其余情况后续增加。。。】 if (superClass.prototype.constructor == Object.prototype.constructor) { superClass.prototype.constructor = superClass; }}
新闻热点
疑难解答
图片精选