JavaScript 原理详解之类继承

/**

 * 主要讲述继承机制的实现问题

 * @author cuitongxin

 */

 

/**

 * 1、对象冒充的方式

 * 原理:

 * 构造函数使用this来给所有的属性和方法赋值,因为构造函数只是一个函数,所以是一个构造函数可以成为

 * 另一个对象的方法,然后在对象中像普通方法一样调用它,该构造方法就会把在它构造函数中定义的属性和方法传递给当前的对象,

 * 当前对象就拥有了构造函数中的所有属性和方法。

 * 注意:

 * 对象中新的属性和方法,要在delete之后定义。

 * 该种继承方式支持多继承的形式。

 */

function ClassA (sdf) {

this.ss = sdf;

this.showMsg = function() {

alert(this.ss);

};

}

function ClassB (tt) {

this.newMethod = ClassA;

this.newMethod(tt);

delete this.newMethod;

}

 

 

/**

 * 2、call 方法

 * 说明:它的第一个参数用作调用call的函数内的this对象所指的对象。其他的参数直接传递给调用call的函数自身。

 * 上例子中的代码可以简化为如下形式

 */

function ClassB (tt,ss) {

ClassA.call(this,tt);

this.ss = ss;

this.showMsg2 = function() {

alert(ss);

};

}

 

/**

 * 3、apply方法

 * 说明:该方法同样第一参数为this对象,第二个参数为传递给调用者的数组。

 * 实现的代码同上

 */

 

 

/**

 * 4、原型链

 * 说明:原型中的所有属性和方法都将被传递给该类的所有实例。

 * 注意:构造函数中没有参数。

 */

function ClassA () {

}

ClassA.prototype.ss = "ss";

ClassA.prototype.showMsg = function () {

alert(this.ss);

};

function ClassB () {

}

ClassB.prototype = new ClassA();

 

/**

 * 5、混合的方式: 原型链 / 冒充方法

 * 这样就不需要考虑原型链中不能带参数的情况了

 */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值