利用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 相关文章推荐
jQuery 获取URL参数的插件
Mar 04 Javascript
js判断浏览器是否支持html5
Aug 17 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
深入理解Angular2 模板语法
Aug 07 Javascript
详解vue 模版组件的三种用法
Jul 21 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
基于JavaScript表单脚本(详解)
Oct 18 Javascript
深入理解 webpack 文件打包机制(小结)
Jan 08 Javascript
vue2.0 如何在hash模式下实现微信分享
Jan 22 Javascript
EXTJS7实现点击拖拉选择文本
Dec 17 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生成UTF8文件的方法
2010/05/15 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
PHP获取url的函数代码
2011/08/02 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP获取文件的MD5值并判断是否被修改的例子
2014/06/19 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
js 学习笔记(三)
2009/12/29 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
微信小程序中换行空格(多个空格)写法详解
2018/07/10 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python网络编程中urllib2模块的用法总结
2016/07/12 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
Django数据库表反向生成实例解析
2018/02/06 Python
解决python大批量读写.doc文件的问题
2018/05/08 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
python flask安装和命令详解
2019/04/02 Python
娱乐地球:Entertainment Earth
2020/01/08 全球购物
2014年五四青年节活动策划书
2014/04/22 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
2014年高中生自我评价范文
2014/09/26 职场文书
代收款委托书范本
2014/10/01 职场文书
2014年班级工作总结
2014/11/14 职场文书
评职称个人总结
2015/03/05 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
dubbo集成zipkin获取Traceid的实现
2021/07/26 Java/Android
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python