小议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对象方法(详解)
Jul 08 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
jQuery的css()方法用法实例
Dec 24 Javascript
基于jQuery实现点击弹出层实例代码
Jan 01 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
Nov 16 Javascript
简单实现js菜单栏切换效果
Mar 04 Javascript
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
原生js获取left值和top值的三种方法
Aug 02 Javascript
React-Native做一个文本输入框组件的实现代码
Aug 10 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
js实现二级联动简单实例
Jan 11 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
德生PL330测评
2021/03/02 无线电
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
jquery.ui.draggable中文文档(原文翻译)
2013/11/15 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
小程序如何构建骨架屏
2019/05/29 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
js实现微信聊天界面
2020/08/09 Javascript
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
TensorFlow深度学习之卷积神经网络CNN
2018/03/09 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
基于Python实现天天酷跑功能
2021/01/06 Python
幼儿运动会邀请函
2014/01/17 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
本科应届生自荐信
2014/06/29 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
公证委托书格式
2014/09/13 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
高考学习决心书
2015/02/04 职场文书
单位实习介绍信
2015/05/05 职场文书
培训简讯范文
2015/07/20 职场文书
思想品德课教学反思
2016/02/24 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python