利用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 兼容鼠标滚轮事件
Apr 07 Javascript
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
Nov 12 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 Javascript
jQuery中ztree 点击文本框弹出下拉框的实例代码
Feb 05 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
Jan 26 Javascript
JS实现简单获取最近7天和最近3天日期的方法
Apr 18 Javascript
Redux实现组合计数器的示例代码
Jul 04 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
Mar 19 Javascript
详解原生JS回到顶部
Mar 25 Javascript
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
原生js+canvas实现贪吃蛇效果
Aug 02 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中GET变量的使用
2006/10/09 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
一个简单的js树形菜单
2011/12/09 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
VueQuillEditor富文本上传图片(非base64)
2020/06/03 Javascript
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python机器人行走步数问题的解决
2018/01/29 Python
用Python3创建httpServer的简单方法
2018/06/04 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Python 3 实现定义跨模块的全局变量和使用教程
2019/07/07 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
python验证码图片处理(二值化)
2019/11/01 Python
Python pandas如何向excel添加数据
2020/05/22 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
django使用多个数据库的方法实例
2021/03/04 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
给校长的一封建议书
2014/03/12 职场文书
大学生求职计划书
2014/04/30 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
校运会新闻稿
2015/07/17 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL