小议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 相关文章推荐
extJs 常用到的增,删,改,查操作代码
Dec 28 Javascript
javascript showModalDialog 内跳转页面的问题
Nov 25 Javascript
DIV+CSS+JS不间断横向滚动实现代码
Mar 19 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
Jan 14 Javascript
javascript继承的六大模式小结
Apr 13 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
vue 2.0路由之路由嵌套示例详解
May 08 Javascript
JavaScript实现的浏览器下载文件的方法
Aug 09 Javascript
自制简易打赏功能的实例
Sep 02 Javascript
js+html5生成自动排列对话框实例
Oct 09 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
Dec 22 Javascript
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全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
2011/12/08 PHP
php木马webshell扫描器代码
2012/01/25 PHP
php中autoload的用法总结
2013/11/08 PHP
php中Snoopy类用法实例
2015/06/19 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
得到jQuery detach()后节点中的某个值实现代码
2013/02/05 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
微信小程序 页面跳转和数据传递实例详解
2017/01/19 Javascript
简单实现vue验证码60秒倒计时功能
2017/10/11 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
Echarts之悬浮框中的数据排序问题
2018/11/08 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
微信小程序实现3D轮播图效果(非swiper组件)
2019/09/21 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
使用python实现生成用户信息
2017/03/20 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
酒店管理毕业生自荐信
2013/10/24 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
工作检讨书500字
2014/10/19 职场文书
活着观后感
2015/06/03 职场文书
校园运动会广播稿
2015/08/19 职场文书
合同范本之电脑出租
2019/08/13 职场文书