利用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 相关文章推荐
JavaScript格式化数字的函数代码
Nov 30 Javascript
javascript实现上传图片并预览的效果实现代码
Apr 11 Javascript
js中同步与异步处理的方法和区别总结
Dec 25 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
Aug 22 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
Oct 27 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
May 10 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
May 31 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
Jul 19 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 Javascript
layui use 定义js外部引用函数的方法
Sep 26 Javascript
继承行为在 ES5 与 ES6 中的区别详解
Dec 24 Javascript
Moment的feature导致线上bug解决分析
Sep 23 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
真正的ZIP文件操作类(php)
2007/07/21 PHP
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
PHP递归删除目录几个代码实例
2014/04/21 PHP
非常好的js代码
2006/06/27 Javascript
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
Python中交换两个元素的实现方法
2018/06/29 Python
python实现图片转字符小工具
2019/04/30 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
django从后台返回html代码的实例
2020/03/11 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
WEB控件可以激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为什么要使用自动传回?
2012/02/21 面试题
毕业生求职简历的自我评价
2013/10/07 职场文书
公立医院改革实施方案
2014/03/14 职场文书
环保口号大全
2014/06/12 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
2014年科技工作总结
2014/11/26 职场文书
产品质量保证书范本
2015/02/27 职场文书
大学入学感言
2015/08/01 职场文书