小议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 相关文章推荐
JavaScript 实现模态对话框 源代码大全
May 02 Javascript
jquery struts 验证唯一标识(公用方法)
Mar 27 Javascript
JavaScript 函数惰性载入的实现及其优点介绍
Aug 12 Javascript
javascript跨浏览器的属性判断方法
Mar 16 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
轻量级javascript 框架Backbone使用指南
Jul 24 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
vue实现树形菜单效果
Mar 19 Javascript
create-react-app 修改为多入口编译的方法
Aug 01 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 Javascript
vue使用Sass时报错问题的解决方法
Oct 14 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获取网卡地址的代码
2008/04/09 PHP
php生成图片缩略图的方法
2015/04/07 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
JS的replace方法介绍
2012/10/20 Javascript
document.write的几点使用心得
2014/05/14 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[03:54]Ehome出征西雅图 回顾2016国际邀请赛晋级之路
2016/08/02 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
Python实现八大排序算法
2016/08/13 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
Python判断两个对象相等的原理
2017/12/12 Python
python的pstuil模块使用方法总结
2019/07/26 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
python文件编写好后如何实践
2020/07/07 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
介绍一下Linux中的链接
2016/05/28 面试题
上课看小说检讨书
2014/02/22 职场文书
销售会计岗位职责
2014/03/15 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
房屋所有权证明
2015/06/19 职场文书
《领导干部从政道德启示录》学习心得体会
2016/01/20 职场文书
小学生节约用水倡议书
2019/08/12 职场文书
python 中的@运算符使用
2021/05/26 Python