利用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 相关文章推荐
Ruffy javascript 学习笔记
Nov 30 Javascript
jQuery中odd选择器的定义和用法
Dec 23 Javascript
HTML5实现留言和回复页面样式
Jul 22 Javascript
jQuery特殊符号转义的实现
Nov 30 Javascript
JS双击变input框批量修改内容
Dec 12 Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 Javascript
JS实现仿百度文库评分功能
Jan 12 Javascript
浅谈vue单一组件下动态修改数据时的全部重渲染
Mar 01 Javascript
JavaScript图片处理与合成总结
Mar 04 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
Jul 15 Javascript
js定义类的方法示例【ES5与ES6】
Jul 30 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/05/04 PHP
php提交post数组参数实例分析
2015/12/17 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
Laravel框架源码解析之入口文件原理分析
2020/05/14 PHP
javascript 打印页面代码
2009/03/24 Javascript
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
javascript的console.log()用法小结
2012/05/31 Javascript
仿谷歌主页js动画效果实现代码
2013/07/14 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Python tkinter常用操作代码实例
2020/01/03 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
说明书怎么写
2014/05/06 职场文书
教师求职信
2014/06/17 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
财务人员岗位职责
2015/02/03 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS