小议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 写类方式之六
Jul 05 Javascript
JQuery操作tr和td内容的方法实例
Mar 06 Javascript
动态添加option及createElement使用示例
Jan 26 Javascript
javascript基于HTML5 canvas制作画箭头组件
Jun 25 Javascript
JavaScript中document.forms[0]与getElementByName区别
Jan 21 Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 Javascript
JavaScript中判断数据类型的方法总结
May 24 Javascript
js常用DOM方法详解
Feb 04 Javascript
Angular2监听页面大小变化的解决方法
Oct 09 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
Mar 03 Javascript
如何解决.vue文件url引用文件的问题
Jan 18 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 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
从网上搜到的phpwind 0day的代码
2006/12/07 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
JavaScript中的E-mail 地址格式验证
2018/03/28 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
Python3实现从指定路径查找文件的方法
2015/05/22 Python
python正则表达式re之compile函数解析
2017/10/25 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
Python中super函数用法实例分析
2019/03/18 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
python使用列表的最佳方案
2020/08/12 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
骆驼官方商城:CAMEL
2016/11/22 全球购物
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
巴黎卡诗美国官方网站:始于1964年的头发头皮护理专家
2017/07/10 全球购物
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
介绍一下OSI七层模型
2012/07/03 面试题
餐厅销售主管职责范本
2014/02/19 职场文书
目标责任书范本
2014/04/16 职场文书
中国梦口号
2014/06/13 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
个人培训总结
2015/03/05 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python
Python下载商品数据并连接数据库且保存数据
2022/03/31 Python