利用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 相关文章推荐
json简单介绍
Jun 10 Javascript
一些常用的JS功能函数(2009-06-04更新)
Jun 04 Javascript
javascript new 需不需要继续使用
Jul 02 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
JavaScript清空数组元素的两种方法简单比较
Jul 10 Javascript
JavaScript 对象深入学习总结(经典)
Sep 29 Javascript
JavaScript观察者模式(经典)
Dec 09 Javascript
很棒的Bootstrap选项卡切换效果
Jul 01 Javascript
JS实现商品筛选功能
Aug 19 Javascript
js JSON.stringify()基础详解
Jun 19 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
Jun 24 Javascript
8个非常实用的Vue自定义指令
Dec 15 Vue.js
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学习资料汇总与网址
2007/03/16 PHP
PHP防注入安全代码
2008/04/09 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
php适配器模式简单应用示例
2019/10/23 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
js判断样式className同时增加class或删除class
2013/01/30 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
用React实现一个完整的TodoList的示例代码
2017/10/30 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
python结合shell查询google关键词排名的实现代码
2016/02/27 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python3生成手写体数字方法
2018/01/30 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
简单了解python单例模式的几种写法
2019/07/01 Python
django rest framework 过滤时间操作
2020/07/12 Python
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
什么是Web Service?
2012/07/25 面试题
小学生秋游活动方案
2014/02/23 职场文书
外语系大学生自荐信范文
2014/03/01 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
初中生300字旷课检讨书
2014/11/19 职场文书
公司放假通知怎么写
2015/04/15 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书