在网上找了很多一直没找到关于JS扩展父类的方法,让我很是郁闷啊~要是真的开发组遇到了该咋整,于是乎自己手写了一些测试代码,没想到通过了……(难道是人品太好了?)废话不多说了直接上代码看看~

  

 <script type="text/javascript">
function chaolei(name){
this.name=name;
this.show=function(){
alert("超类");
};
}
function zilei(name){
this.name=name;
}
zilei.prototype=new chaolei();
zilei.prototype.constructor=zilei;
zilei.prototype.show=function(){
chaolei.call(zilei);
zilei.show();
alert(this.name);
};
var a=new zilei("我是谁?");
a.show();
</script>

  用的是标准的原型链的继承写法,通过call函数来扩展了父类的show方法。运行的结果为先弹出“超类”然后弹出“我是谁”。

  简单说一下原理吧(这里不介绍如何继承,想看继承去我以前的文章里找吧~)。这里继承完父类后,子类通过prototype给自己增加了一个show方法,这个方法和父类的show方法同名,所以如果不用call会覆盖掉父类的方法,但是我们用call之后首先让父类的show方法可以在子类中调用,这就是chaolei.call(zilei)的作用了,这里建议用子类的名字作为参数,因为如果用this的话会造成污染,因为这样的话作用域就变成了整个子类show方法,如果父类中也有一个跟子类相同的变量this.name那么接下来的alert(this.name)弹出的就是父类的了。然后zilei.show()这个就是调用的父类的show方法了(因为用了call函数,所以这里调用show时只能调用父类的因为子类的show还没有完成)。这里需要强调一点,如果call里面的参数是zilei的话接下来zilei.show这里也必须用“zilei”否则会报错。然后再一个alert(this.name);就是调用子类的变量了~所以也就先执行了父类的show然后又运行了子类show方法的扩展了!

  以上是我的个人理解,如果有不多的地方还请高手拍砖~并给我指明错误~谢谢!

js扩展父类方法的更多相关文章

  1. 如何使用 js 扩展 prototype 方法

    如何使用 js 扩展 prototype 方法 expand prototype function enhancedLog(msg = ``) { // this.msg = msg; enhance ...

  2. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  3. JS扩展方法——字符串trim()

    转自:http://www.cnblogs.com/kissdodog/p/3386480.html <head> <title>测试JS扩展方法</title> ...

  4. JS扩展方法

    JS扩展方法与C#的扩展方法非常相似,也是可以链式调用的,也是通过对某个类的扩展写法来实现.这个东西非常好用,如果将预先写好的方法放到一个js里面引用的话,那么后面写js将非常有趣. 下面给出一个例子 ...

  5. jquery 扩展插件方法

    分析插件jquery.countdown.js (function($) { $.fn.countdown = function(options) { // default options var d ...

  6. 封装jQuery Validate扩展验证方法

    一.封装自定义验证方法-validate-methods.js /***************************************************************** j ...

  7. Xilium.CefGlue利用XHR实现Js调用c#方法

    防外链 博客园原文地址在这里http://www.cnblogs.com/shen6041/p/3442499.html 引 Xilium CefGlue是个不错的cef扩展工程,托管地址在这里 ht ...

  8. JS扩展 或 Jquery的扩展写法

    <script>//JS扩展String函数test,其它类推String.prototype.test = function(s){ alert(this+s);}var str = ' ...

  9. esayui扩展验证方法

    下面是关于平时中积累的esayui扩展验证方法仅作记录:       /**************************************************************** ...

随机推荐

  1. NuGet(Nuget Packages)

    Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展.在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加.移除和更新引 ...

  2. javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇

    即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...

  3. C语言学习第九章

    学习C语言的最后一节课了,原因嘛上一章的末尾说过了,其实写这篇博客的时候以后开始学习Java一个多月了,一直因为各种各样的原因没有坚持做到每天一篇学习记录,可能主要因为懒吧....也有点笨,Java的 ...

  4. JAVAEE规范基础知识

    JavaEE规范基础知识 本人博客文章网址:https://www.peretang.com/basic-knowledge-of-javaee-standard/ JavaEE简介 JavaEE,J ...

  5. Apache Ranger对HDFS的访问权限控制的原理分析(一)

    介绍 Aapche Ranger是以插件的形式集成到HDFS中,由Ranger Admin管理访问策略,Ranger插件定期轮询Admin更新策略到本地,并根据策略信息进行用户访问权限的判定.Rang ...

  6. bootstrap快速入门笔记(三)响应式,行,列,偏移量,排序

    一,响应式列重置 .clearfix <div class="row"> <div class="col-xs-6 col-sm-3"> ...

  7. 0基础搭建Hadoop大数据处理-初识

    在互联网的世界中数据都是以TB.PB的数量级来增加的,特别是像BAT光每天的日志文件一个盘都不够,更何况是还要基于这些数据进行分析挖掘,更甚者还要实时进行数据分析,学习,如双十一淘宝的交易量的实时展示 ...

  8. 简单明了查看内存使用和ubuntu的版本号及位数

    1.查看ubuntu的版本号:cat /etc/issue 2.查看系统是32位的还是64位:getconf LONG_BIT 3.查看内存使用 free free命令可以用来查看系统内存使用情况,- ...

  9. React入门---属性(state)-7

    state------>虚拟dom------>dom 这个过程是自动的,不需要触发其他事件来调用它. state中文理解:页面状态的的一个值,可以存储很多东西. 学习state的使用: ...

  10. [UWP]不怎么实用的Shape指南:自定义Shape

    1. 前言 这篇文章介绍了继承并自定义Shape的方法,不过,恐怕,事实上,100个xaml的程序员99个都不会用到.写出来是因为反正都学了,当作写个笔记. 通过这篇文章,你可以学到如下知识点: 自定 ...