首页 > 学院 > 开发设计 > 正文

对象继承训练(1)

2019-11-11 05:43:14
字体:
来源:转载
供稿:网友

上节课我们已经了解了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);}//定义SportsNewsvar SportsNews = function () {}

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

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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表