利用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调试工具 Javascript Debug Toolkit 2.0.0版本发布
Dec 02 Javascript
dwr spring的集成实现代码
Mar 22 Javascript
javascript 写类方式之四
Jul 05 Javascript
JavaScript随机排序(随即出牌)
Sep 17 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
Nov 22 Javascript
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
Nov 18 Javascript
JS实现Select的option上下移动的方法
Mar 01 Javascript
强大的JavaScript响应式图表Chartist.js的使用
Sep 13 Javascript
ionic2中使用自动生成器的方法
Mar 04 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
Vue 数据响应式相关总结
Jan 28 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实现简单爬虫的方法
2015/07/29 PHP
php操作xml并将其插入数据库的实现方法
2016/09/08 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
js限制文本框只能输入整数或者带小数点的数字
2015/04/27 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
ES7之Async/await的使用详解
2019/03/28 Javascript
JS实现倒序输出的几种常用方法示例
2019/04/13 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
python处理数据,存进hive表的方法
2018/07/04 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
python 伯努利分布详解
2020/02/25 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
Python requests接口测试实现代码
2020/09/08 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
新学期红领巾广播稿
2014/01/14 职场文书
中秋晚会策划方案
2014/06/12 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers