利用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 相关文章推荐
js处理表格对table进行修饰
May 26 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
js实现数组转换成json
Jun 26 Javascript
window.onerror()的用法与实例分析
Jan 27 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
jquery心形点赞关注效果的简单实现
Nov 14 Javascript
jQuery插件版本冲突的处理方法分析
Jan 16 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
May 30 Javascript
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 Javascript
VUE基于NUXT的SSR 服务端渲染
Nov 30 Javascript
vue.js实现照片放大功能
Jun 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
PHP开发中四种查询返回结果分析
2011/01/02 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
PHP 验证身份证是否合法的函数
2017/02/09 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
2016/12/05 Javascript
快速处理vue渲染前的显示问题
2018/03/05 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
jQuery实现鼠标移入显示蒙版效果
2020/01/11 jQuery
react组件基本用法示例小结
2020/04/27 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
Python 运行.py文件和交互式运行代码的区别详解
2019/07/02 Python
解决Mac下使用python的坑
2019/08/13 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
社区中秋节活动方案
2014/01/29 职场文书
护理学应聘自荐书范文
2014/02/05 职场文书
2014年党员自我评议对照检查材料
2014/09/20 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏