小议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 相关文章推荐
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
Aug 06 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
Aug 22 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
基于jQuery仿淘宝产品图片放大镜特效
Oct 19 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
Javascript快速实现浏览器系统通知
Aug 26 Javascript
vue中动态设置meta标签和title标签的方法
Jul 11 Javascript
JS实现查找数组中对象的属性值是否存在示例
May 24 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 10 Javascript
vue实现点击按钮切换背景颜色的示例代码
Jun 23 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
提高PHP编程效率的53个要点(经验小结)
2010/09/04 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
Js实现滚动变色的文字效果
2014/06/16 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
如何实现iframe父子传参通信
2020/02/05 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
python获取糗百图片代码实例
2013/12/18 Python
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
增大python字体的方法步骤
2020/07/05 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
numba提升python运行速度的实例方法
2021/01/25 Python
澳大利亚网上书店:QBD
2021/01/09 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
《荷花》教学反思
2014/04/16 职场文书
优秀教师推荐材料
2014/12/16 职场文书
2015年人力资源工作总结
2015/04/08 职场文书
vue2实现provide inject传递响应式
2021/05/21 Vue.js