对象继承训练(1)

上节课我们已经了解了prototype的基本使用:http://blog.csdn.net/github_26672553/article/details/54375735

本节课,我们来完成对象的继承训练。

上节课课后作业(训练prototype)

var God = new GodClass({
version:’1.0’,
});
在这里我们执行alert(God.version)
请设定一个GodClass.init方法,在该方法中传入参数,后面的任何实例对象不传参数也有version这个属性

var GodClass = function abc(obj){
    if(this instanceof abc){

        if(obj != undefined){
            //把obj中的可枚举属性赋值给this
            Object.assign(this,obj); //注意:这个this,必须在你实例化GodClass之后才会产生
        }

    }else{
        alert('不要胡搞');
    }
}

var God = new GodClass({version:'1.0'});
alert(God.version); //弹出 '1.0'

上面代码是可以的。

下面我们完成作业,通过一个类似静态函数的方式,修改GodClass

var GodClass = function abc(obj){
    if(this instanceof abc){

        if(obj != undefined){
            //把obj中的可枚举属性赋值给this
            Object.assign(this,obj); //注意:这个this,必须在你实例化GodClass之后才会产生
        }

    }else{
        alert('不要胡搞');
    }
}

//定义一个init方法
GodClass.init = function(obj){
    if(obj != undefined){
        Object.assign(this.prototype,obj); //注意:这里是把obj对象的属性赋值给了this的prototype
    }
}

注意,我们给GodClass增加了一个init方法,该方法接收一个对象,我们把对象中的属性赋值给了原型(prototype)上。

以后我们只需要调用一次init方法后,后面再实例化GodClass就不必传入参数了:

//然后我们可以通过类似静态函数的方法传入参数
GodClass.init({version:'1.0'});

//这里实例化的时候可不传入参数
var God = new GodClass();
alert(God.version); //弹出 '1.0'

这节课我们来训练所谓的对象继承

关键点 Function.prototype.call()
方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法

//基类
var BaseNews = function () {
    this.display = function(){
        alert('新闻基类');
    };
}

var SportsNews = function () {

    BaseNews.call(this); //这样就继承了BaseNews类中的方法
}

我们使用SportsNews类:

//实例化
var sn = new SportsNews();
sn.display(); //发现确实存在这个方法

我们还可以通过另外的方式来扩展
除了在SportsNews中,还可以直接在Function的原型上增加扩展,修改如下:

//基类
var BaseNews = function () {
    this.display = function(){
        alert('新闻基类');
    };
}

//给Function进行扩展
Function.prototype.extends = function (className) {
    className.call(this.prototype);
}

//定义SportsNews
var SportsNews = function () {
}

上面代码可以看出,我们给Function.prototype增加了extends方法,此方法就是用来扩展类的。
因为增加在原型上所以SportsNews也有该方法,我们来扩展SportsNews

//扩展SportsNews
SportsNews.extends(BaseNews);

//实例化
var sn = new SportsNews();
sn.display(); //发现确实存在这个方法

这个时候,发现实例化后的SportsNews对象,还是有display方法,因为extends方法,是call了基类的原型。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值