小议Function.apply() 之一------(函数的劫持与对象的复制)


Posted in Javascript onNovember 30, 2006

关于对象的继承,一般的做法是用复制法: Object.extend

见protpotype.js 的实现方法:

Object.extend = function(destination, source) {  
  for (property in source) {  
    destination[property] = source[property];  
  }  
  return destination;  
} 

除此以外,还有一种不太常见的方法:  Function.apply.

apply 方法能劫持(<<Ajax in Action>> 书中用到"劫持"一语,很生动啊)另外一个对象的方法,
继承另外一个对象的属性。
示范代码如下:
Apply示范代码 

<script>  function Person(name,age){   //定义一个类,人类   
    this.name=name     //名字   
    this.age=age       //年龄  
    this.sayhello=function(){alert("hello")}  
}  
function Print(){            //显示类的属性  
    this.funcName="Print"  
    this.show=function(){       
        var msg=[]  
        for(var key in this){  
            if (typeof(this[key])!="function") msg.push([key,":",this[key]].join(""))  
        }  
        alert(msg.join("\n"))  
    }  
}  
function Student(name,age,grade,school){    //学生类  
    Person.apply(this,arguments)  
    Print.apply(this,arguments)  
    this.grade=grade                  //年级  
    this.school=school                    //学校  
}  
var p1=new Person("jake",10)  
p1.sayhello()  
var s1=new Student("tom",13,6,"清华小学")  
s1.show()  
s1.sayhello()  
alert(s1.funcName)  
</script> 
 学生类本来不具备任何方法,但是在 Person.apply(this,arguments)  后,他就具备了 Person类的sayhello方法和
所有属性。  在 Print.apply(this,arguments) 后就自动得到了  show() 方法。

本文,作为抛砖引玉,只对 apply 的用法(在对象继承和函数劫持方面)做个小示范,其他更深入的应用要
靠大家慢慢去领会了。

Javascript 相关文章推荐
用JQuery在网页中实现分隔条功能的代码
Aug 09 Javascript
js特殊字符转义介绍
Nov 05 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
Jun 05 Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 Javascript
Ajax中解析Json的两种方法对比分析
Jun 25 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
vue结合Echarts实现点击高亮效果的示例
Mar 17 Javascript
小程序如何写动态标签的实现方法
Feb 05 Javascript
解决vant中 tab栏遇到的坑 van-tabs
Nov 04 Javascript
vue完美实现el-table列宽自适应
May 08 Vue.js
addRule在firefox下的兼容写法
Nov 30 #Javascript
跟随鼠标旋转的文字
Nov 30 #Javascript
推荐:极酷右键菜单
Nov 29 #Javascript
双击滚屏-常用推荐
Nov 29 #Javascript
js获取单选按钮的数据
Nov 27 #Javascript
准确获得页面、窗口高度及宽度的JS
Nov 26 #Javascript
解决FireFox下[使用event很麻烦]的问题
Nov 26 #Javascript
You might like
PHP实现Socket服务器的代码
2008/04/03 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
laravel实现上传图片并在页面显示的例子
2019/10/14 PHP
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
2015/12/20 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
2017/09/05 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
python实现simhash算法实例
2014/04/25 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
python通过imaplib模块读取gmail里邮件的方法
2015/05/08 Python
Python调用C++程序的方法详解
2017/01/24 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
python与pycharm有何区别
2020/07/01 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
群胜软件Java笔试题
2012/09/29 面试题
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
转让协议书
2015/01/27 职场文书
教师培训简讯
2015/07/20 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server
python开发人人对战的五子棋小游戏
2022/05/02 Python