小议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 相关文章推荐
js判断undefined变量类型使用typeof
Jun 03 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
Oct 26 Javascript
jQuery定义背景动态切换效果的方法
Mar 23 Javascript
CSS3实现动态背景登录框的代码
Jul 28 Javascript
js获取及判断键盘按键的方法
Dec 01 Javascript
js判断鼠标位置是否在某个div中的方法
Feb 26 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
简单理解js的prototype属性及使用
Dec 07 Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 Javascript
jquery平滑滚动到顶部插件使用详解
May 08 jQuery
使用Javascript简单计算器
Nov 17 Javascript
使用pm2部署node生产环境的方法步骤
Mar 09 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
国内php原创论坛
2006/10/09 PHP
MySQL数据源表结构图示
2008/06/05 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
jQuery预加载图片常用方法
2015/06/15 Javascript
12个超实用的JQuery代码片段
2015/11/02 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
Django内容增加富文本功能的实例
2017/10/17 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
高中校园广播稿
2014/01/11 职场文书
农业开发项目建议书
2014/05/16 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
中学生检讨书1000字
2014/10/28 职场文书
教代会闭幕词
2015/01/28 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
初中团委工作总结
2015/08/13 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL