小议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实现的页面关键字密度查询代码
Dec 27 Javascript
JS获取鼠标坐标的实例方法
Jul 18 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
Mar 11 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 Javascript
JavaScript中错误正确处理方式小结你用对了吗
Oct 10 Javascript
vue组件间通信子与父详解(二)
Nov 07 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 Javascript
p5.js实现斐波那契螺旋的示例代码
Mar 22 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
Apr 19 Javascript
vue实现鼠标经过动画
Oct 16 Javascript
微信小程序实现上拉加载功能
Nov 20 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 5.0 Pear安装方法
2006/12/06 PHP
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
详解Angular CLI + Electron 开发环境搭建
2017/07/20 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[45:06]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第二场 11.28
2020/12/02 DOTA
[48:31]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第二场 12.17
2020/12/19 DOTA
python使用pymysql实现操作mysql
2016/09/13 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
2018/12/24 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
Python实现多进程的四种方式
2019/02/22 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
python字符串下标与切片及使用方法
2020/02/13 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
应聘自荐书
2013/10/08 职场文书
高中语文课后反思
2014/04/27 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
体检通知范文
2015/04/21 职场文书
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python