利用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 相关文章推荐
使用apply方法处理数组的三个技巧[译]
Sep 20 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
jQuery插件ajaxfileupload.js实现上传文件
Oct 23 Javascript
AngularJS在IE8的不支持的解决方法
May 13 Javascript
js将json格式的对象拼接成复杂的url参数方法
May 25 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
Jun 19 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
May 22 Javascript
详解利用eventemitter2实现Vue组件通信
Nov 04 Javascript
在vue中使用console.log无效的解决
Aug 09 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新手上路(三)
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
在PHP中使用模板的方法
2008/05/24 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
3种不同的ContextMenu右键菜单实现代码
2016/11/03 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
js如何验证密码强度
2020/03/18 Javascript
[02:49]2014DOTA2电竞也是体育项目! 势要把荣誉带回中国!
2014/07/20 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python中的index()方法使用教程
2015/05/18 Python
python求最大值最小值方法总结
2019/06/25 Python
python tornado修改log输出方式
2019/11/18 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
2015年财务试用期工作总结
2014/12/24 职场文书
年会邀请函范文
2015/01/30 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js