利用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 相关文章推荐
学习ExtJS TextField常用方法
Oct 07 Javascript
JavaScript关于select的相关操作说明
Jan 13 Javascript
Jquery 插件学习实例1 插件制作说明与tableUI优化
Apr 02 Javascript
Confirmer JQuery确认对话框组件
Jun 09 Javascript
JavaScript 的继承
Oct 01 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
中止javascript执行的方法
Feb 14 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
在HTML文档中嵌入JavaScript的四种方法
May 07 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
May 10 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
咖啡语言
2021/03/03 咖啡文化
PHP排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
javascript基本类型详解
2014/11/28 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
原生js配合cookie制作保存路径的拖拽
2015/12/29 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
使用angular帮你实现拖拽的示例
2017/07/05 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Django中的文件的上传的几种方式
2018/07/23 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Python 读取位于包中的数据文件
2020/08/07 Python
Python根据字典的值查询出对应的键的方法
2020/09/30 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
html5唤起app的方法
2017/11/30 HTML / CSS
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
Gibson London官网:以地道的英国男装而著称
2019/12/06 全球购物
聚美优品陈欧广告词
2014/03/14 职场文书
三年级评语大全
2014/04/23 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
人事任命书格式
2014/06/05 职场文书
小学运动会报道稿
2014/10/04 职场文书
后天观后感
2015/06/08 职场文书
八年级物理教学反思
2016/02/19 职场文书
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技