小议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 For Beginners(转载)
Jan 05 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
jquery鼠标停止移动事件
Dec 21 Javascript
javascript实现修改微信分享的标题内容等
Dec 11 Javascript
node.js中使用socket.io制作命名空间
Dec 15 Javascript
关于JS中prototype的理解
Sep 07 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
BootStrap tab选项卡使用小结
Aug 09 Javascript
Vue.js搭建移动端购物车界面
Jun 28 Javascript
js+html实现周岁年龄计算器
Jun 25 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
Element el-button 按钮组件的使用详解
Feb 01 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 特殊字符处理函数
2008/09/05 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
解决tp5在nginx下修改配置访问的问题
2019/10/16 PHP
JsDom 编程小结
2011/08/09 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
2019/11/14 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python txt文件加入字典并查询的方法
2019/01/15 Python
解决pycharm的Python console不能调试当前程序的问题
2019/01/20 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python中metaclass原理与用法详解
2019/06/25 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
2020/01/14 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
Python Serial串口基本操作(收发数据)
2020/11/06 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
Paul Smith英国官网:英国国宝级时装品牌
2019/03/21 全球购物
初中美术教学反思
2014/01/29 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书