js中的类,对象和继承

/*
 *一个例子让你理解js中的类,对象和继承的关系
 * 阅读前需要了解以下几个js方法的用途:prototype,apply,call,不懂就google吧,另外,arguments、callee、caller也顺便看看吧。需要说的是,js的继承机制与传统面向对象语言中的继承有着质的不同。
 * js中的继承,都是直接将基类中的方法和属性直接复制给继承类,就这么简单。
 */
//基类
function baseClass() {
    this.showMsg = function () {
        alert("baseClass::showMsg");
    }
    this.baseShowMsg = function () {
        alert("baseClass::baseShowMsg");
    }
}

//原型法扩展baseClass
baseClass.prototype = {
    baseShowProtoMsg: function () {
        alert("baseClass:baseShowProtoMsg");
    }
}

//全局唯一对象,不能实例化,也无法被extendClass继承,只能直接通过如下方式调用:baseClass.showMsg()
baseClass.showMsg = function () {
    alert("baseClass::showMsg static");
}

//扩展类
function extendClass() { //继承方式一 通过apply方法继承
    /*
     *在此处使用apply方法继承,extendClass的showMsg不会被baseClass的showMsg覆盖,baseShowProtoMsg不会被继承
     */
    //baseClass.apply(this,arguments); 

    this.showMsg = function () {
        alert("extendClass::showMsg");
    }
    /*
     *在此处使用apply方法继承,extendClass的showMsg将被baseClass的showMsg覆盖
     *baseClass中通过prototype扩展的方法baseShowProtoMsg不会被apply方式继承
     */
    //baseClass.apply(this, arguments);
}

/*
 *继承方式二 通过prototype继承baseClass,此处实际上是复制baseClass的属性和方法给extendClass,extendClass中已存在的属性和方法将不会被复制
 *baseClass中通过prototype扩展的方法baseShowProtoMsg也会被继承
 */
extendClass.prototype = new baseClass(); //extendClass将baseClass的方法和属性全部克隆了一遍,使用这种继承方法,extendClass的showMsg不会被baseClass的showMsg覆盖

//实例化extendClass
var instance = new extendClass();

instance.showMsg(); //显示extendClass::showMsg

instance.baseShowProtoMsg(); //显示baseClass:baseShowProtoMsg

instance.baseShowMsg(); //显示baseClass::baseShowMsg

instance.showMsg(); //显示extendClass::showMsg

//call方法使instance调用baseClass的showMsg函数,即showMsg中的this指的是instance对象
baseClass.showMsg.call(instance); //显示baseClass::showMsg static

//实例化baseClass
var baseinstance = new baseClass();

//注意此处call得到的结果,与上面调用call的差别
baseinstance.showMsg.call(instance); //显示baseClass::showMsg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值