利用javascript中的call实现继承


Posted in Javascript onJanuary 22, 2007

昨天阿丹传了一个javascript中的重载例子给我,感觉不错.虽然到现在还是不太明白.怎么实现的.但还是贴出来.
实现setTimeout传object对象
看以下代码实现向里面的function 传参数
<script type="text/javascript">
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) {
 if(typeof fRef == 'function'){
  var argu = Array.prototype.slice.call(arguments,2);
  var f = (function(){ fRef.apply(null, argu); });
  return _st(f, mDelay);
 }
 return _st(fRef,mDelay);
}
function test(x){
 alert(x);
}
window.setTimeout(test,1000,'fason');
</script>

call方法JScript参考中的说明:调用一个对象的一个方法,以另一个对象替换当前对象。call([thisObj[,arg1[, arg2[, [,.argN]]]]]),但是没有示例 
apply方法JScript参考中的说明:应用某一对象的一个方法,用另一个对象替换当前对象。apply([thisObj[,argArray]]) 
实际上这两个的作用几乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg参数可以是变量,而apply([thisObj[,argArray]])中的参数为数组集合。 

今早又看到一篇利用call实现继承的例子.呵呵..也一并贴出来.这个例子比较简单.就算是由浅入深吧
<script language="javascript" type="text/javascript">

      function father(){//父类

             var self=this;                                  //私有变量,子类里不会继承!

             var var_private="private variable";      //私有变量

             this.var_public="public variable";  //公有变量

             

             this.author="xling";

             this.test=function(msg){                  //公有方法

                   alert("该方法位于父类 :" + msg + "\n" + self.author);

             }

             

             var test2=function(){                      //私有方法,子类不能调用

                   alert("这个方法是父类的私有方法");

             }

      }

      

      function father2(){

             this.email="xlingFairy#hotmail.com";

      }

      

      function suber(){//子类

             father.call(this);//通过这一句来继承父类(father)类的可见变量及方法(this)

      }

      

      function sun(){

             suber.call(this);

             father2.call(this);//和上面的一句放在一起,???多重?承!爽啊!

      }

      

      var mySuber=new suber();

             mySuber.test("参数是从子类的实例里传入的");

             //mySuber.test2(); //这一句会发生错误码,因为test2是父类的私有类

             alert("父类的私有变量,子类不能读取:" + mySuber.var_private);

             alert("父类的公有变量,子类可以读取" + mySuber.var_public);

      

      var mySun=new sun();

             mySun.test("这个是从孙子级的实例里传入的参数");

             alert("父类的私有变量,子类不能读取:" + mySun.var_private);

             alert("父类的公有变量,子类可以读取" + mySun.var_public);

             alert(mySun.email);

</script>

Javascript 相关文章推荐
jQuery 获取对象 定位子对象
May 31 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
Aug 09 Javascript
JS实现css hover操作的方法示例
Apr 07 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
Js实现京东无延迟菜单效果实例(demo)
Jun 02 Javascript
vue mint-ui学习笔记之picker的使用
Oct 11 Javascript
js中null与空字符串&quot;&quot;的区别讲解
Jan 17 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
Mar 08 Javascript
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
微信小程序云开发之使用云函数
May 17 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
Jun 18 jQuery
vue中使用element ui的弹窗与echarts之间的问题详解
Oct 25 Javascript
Javascript里使用Dom操作Xml
Jan 22 #Javascript
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 #Javascript
写的htc的数据表格
Jan 20 #Javascript
共享自己写一个框架DreamScript
Jan 20 #Javascript
javascript读取RSS数据
Jan 20 #Javascript
一个多次搜索+多次传值的解决方案
Jan 20 #Javascript
短信提示使用 特效
Jan 19 #Javascript
You might like
php 数组随机取值的简单实例
2016/05/23 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
简介BootStrap model弹出框的使用
2016/04/27 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
vue写一个组件
2018/04/09 Javascript
基于layui table返回的值的多级嵌套的解决方法
2019/09/19 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
浅谈Python中的数据类型
2015/05/05 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
flask实现验证码并验证功能
2019/12/05 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
linux面试题参考答案(7)
2012/10/29 面试题
yy结婚证婚词
2014/01/10 职场文书
四年大学自我鉴定
2014/02/17 职场文书
2014元旦晚会策划方案
2014/02/19 职场文书
2014信息公开实施方案
2014/02/22 职场文书
开业主持词
2014/03/21 职场文书
员工辞职信范文大全
2015/05/12 职场文书
Java新手教程之ArrayList的基本使用
2021/06/20 Java/Android
用Java实现简单计算器功能
2021/07/21 Java/Android
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS