利用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实现计算加载页面所用的时间
Apr 02 Javascript
详解jquery中$.ajax方法提交表单
Nov 03 Javascript
使用pjax实现无刷新更改页面url
Feb 05 Javascript
基于Bootstrap仿淘宝分页控件实现代码
Nov 07 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
vue loadmore 组件滑动加载更多源码解析
Jul 19 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
May 23 Javascript
react-router 路由切换动画的实现示例
Dec 03 Javascript
Node.js动手撸一个静态资源服务器的方法
Mar 09 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
Sep 24 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 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
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
js报$ is not a function 的问题的解决方法
2014/01/20 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
关于HTTP传输中gzip压缩的秘密探索分析
2018/01/12 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
JavaScript中构造函数与原型链之间的关系详解
2019/02/25 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
vue 需求 data中的数据之间的调用操作
2020/08/05 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python网络编程学习笔记(九):数据库客户端 DB-API
2014/06/09 Python
python实现矩阵乘法的方法
2015/06/28 Python
Python实现选择排序
2017/06/04 Python
Python绘制3D图形
2018/05/03 Python
Python logging设置和logger解析
2019/08/28 Python
python实现QQ邮箱发送邮件
2020/03/06 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
2020/03/06 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
美国眼镜在线零售商:Dualens
2019/12/07 全球购物
构造方法和其他方法的区别?怎么调用父类的构造方法
2013/09/22 面试题
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
职业教育毕业生求职信
2013/11/09 职场文书
小学毕业感言300字
2014/02/19 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
发展党员工作情况汇报
2014/10/28 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
Java中try catch处理异常示例
2021/12/06 Java/Android