小议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 相关文章推荐
不错的asp中显示新闻的功能
Oct 13 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
extjs每个组件要设置唯一的ID否则会出错
Jun 15 Javascript
JS动态日期时间的获取方法
Sep 28 Javascript
jQuery进行组件开发完整实例
Dec 15 Javascript
JS实现的DIV块来回滚动效果示例
Feb 07 Javascript
js实现京东轮播图效果
Jun 30 Javascript
Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页功能
Jan 26 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 Javascript
JavaScript Event Loop相关原理解析
Jun 10 Javascript
vue穿梭框实现上下移动
Jan 29 Vue.js
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
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
2011/08/08 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
php的SimpleXML方法读写XML接口文件实例解析
2014/06/16 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
php加密解密字符串示例
2016/10/13 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python将图片文件转换成base64编码的方法
2015/03/14 Python
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python虚拟环境迁移方法
2019/01/03 Python
Django 路由控制的实现
2019/07/17 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
python自动生成证件号的方法示例
2021/01/14 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
Foot Locker英国官网:美国知名运动产品零售商
2019/02/21 全球购物
医院后勤自我鉴定
2013/10/13 职场文书
甜点店创业计划书
2014/01/27 职场文书
《阳光》教学反思
2014/02/23 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
Java SSM配置文件案例详解
2021/08/30 Java/Android