手机版

Javascript播放与继承(一)

时间:2021-11-08 来源:互联网 编辑:宝哥软件园 浏览:

无论Javascript是面向对象语言还是支持对象的语言,我想每个人都有自己的看法。那些忠实于Javascript的粉丝一定会说,Javascript是一种面向对象的语言。比如在《Javascript王者归来》这本书里,Javascript是基于原型面向对象的。我来说说我个人的看法。面向对象的三大特性,继承性、多态性和封装性,Javascript虽然没有Java、C#等面向对象语言那么快,但毕竟有一些支持。所以说Javascript是一种面向对象的语言是有道理的,但是从继承的部分来说,有一系列的继承方法,但是每一种继承方法都无法实现真正的面向对象语言的威力,所以说JavaScript是面向对象的就有些牵强了。综上所述,以我对Javascript的理解,我更愿意称之为简化的面向对象,或者‘伪’面向对象(这个伪词没有贬义)。今天,我们将讨论面向对象的第一个特性:继承。什么是继承?我不想说这些废话。有一只动物,一个人和一个女孩。这是最简单、最典型的继承链。在C#这样的面向对象系统中,这很容易。复制代码如下:类动物{}类人:类动物{}类女孩:人{}。然后在Javascript中,没有类,也没有继承的实现。我们做什么呢物体伪装(结构继承法)什么是物体伪装?我们可以称之为结构继承,这样更容易理解。顾名思义,就是用构造函数来玩继承。也就是说,把父类的构造函数作为普通方法放入子类的构造函数中执行。这样,在构造对象时,子类的对象当然可以构造父类的方法!用上面的例子,代码如下:复制代码如下:函数animal () {this。run=function () {alert('我可以运行');};}函数People(name) {//这里传入父类的构造函数,然后执行父类的构造函数,然后可以使用父类中的//方法。父亲=动物;this .父亲();//记得删除,否则当子类被添加到与父类同名的方法中时,会被修改为父类。删除这个。父亲;this.name=name这个。Say=function(){alert('我叫' this . name ');} }函数Girl(姓名、年龄){ this .父亲=人;父亲(姓名);删除这个。父亲;this.age=年龄;这个。introduction=function(){ alert('我的名字是' this.name '。我是“这个年龄”;};}这样就实现了一个继承链。测试下,复制代码的代码如下: var a=new Animal();a .运行();var p=新人(' wind king ');跑();比如说();var g=新少女('宣',22);g . Run();比如说();g .介绍();结果如下:A.

b.

c.

d.

e.

f.

测试成功!让我们总结一下这段代码的要点。指定父类,声明父类对象,然后删除临时变量。你觉得麻烦吗?至少我是这么认为的。一旦忘记删除,就要承担父类被修改的风险。为此,我们使用call和apply来改进这一点!看代码,还是上面的例子(为了让大家更容易理解,修改了需求,animal有名字):复制代码的代码如下:函数Animal(名字){this。run=function () {alert('我可以运行');};}函数People(name) {//继承this .父亲=Animal by call方法;父亲,呼唤(这个,名字);this.name=name这个。SayName=function(){alert('我的名字是' this.name);};}函数Girl(姓名、年龄){//使用apply方法继承this .父亲=人;this .父辈. apply(this,new Array(name));this.age=年龄;这个。introduction=function(){ alert('我的名字是' this.name '。我是“这个年龄”;};}使用相同的测试代码,我发现测试同样成功。如果你是新手,看完这两个代码可能会有点晕。什么是调用,什么是应用?好了,在玩法与传承这个话题上,我加入一个补充系列。如果你对此一无所知,可以看看我的文章:《玩转方法:call和apply》。对象伪装,这只是实现继承的一种方式。在下一篇文章中,我将继续写其他继承方法以及几种继承方法的优缺点。请继续关注。

版权声明:Javascript播放与继承(一)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。