小议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 相关文章推荐
Jquery UI实现一次拖拽多个选中的元素操作
Dec 01 Javascript
Bootstrap源码解读表单(2)
Dec 22 Javascript
Node.js查找当前目录下文件夹实例代码
Mar 07 Javascript
JS实现两周内自动登录功能
Mar 23 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
Jul 10 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
Apr 02 Javascript
ES6 Set结构的应用实例分析
Jun 26 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
Aug 31 Javascript
vue3.0生命周期的示例代码
Sep 24 Javascript
原生JavaScript实现进度条
Feb 19 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
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
javascript生成大小写字母
2015/07/03 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
基于vue-ssr的静态网站生成器VuePress 初体验
2018/04/17 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
python实现SOM算法
2018/02/23 Python
PyQT实现多窗口切换
2018/04/20 Python
python实现Windows电脑定时关机
2018/06/20 Python
使用Python进行目录的对比方法
2018/11/01 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
前台领班岗位职责
2013/12/04 职场文书
租赁意向书范本
2014/04/01 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
公司财务管理制度
2015/08/04 职场文书
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS