利用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 相关文章推荐
Javascript的各种节点操作实例演示代码
Jun 27 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
基于jQuery选择器的整理集合
Apr 26 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
Aug 23 Javascript
js this函数调用无需再次抓获id,name或标签名
Mar 03 Javascript
Javascript基础教程之switch语句
Jan 18 Javascript
JS实现简单拖拽效果
Jun 21 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
动态内存分配导致影响Javascript性能的问题
Dec 18 Javascript
websocket4.0+typescript 实现热更新的方法
Aug 14 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验证码(支持中文)
2007/02/14 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
Node.js模块加载详解
2014/08/16 Javascript
jQuery简单实现隐藏以及显示特效
2015/02/26 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
jquery实现多次上传同一张图片
2017/01/09 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
vue3.0 CLI - 1 - npm 安装与初始化的入门教程
2018/09/14 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
python opencv实现切变换 不裁减图片
2018/07/26 Python
Django REST framework 分页的实现代码
2019/06/19 Python
python读取Kafka实例
2019/12/23 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
如何基于python实现不邻接植花
2020/05/01 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
海南地接欢迎词
2014/01/14 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
大学军训感言300字
2014/03/09 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python