小议Function.apply() 之一------(函数的劫持与对象的复制)

时间:2021-05-18

关于对象的继承,一般的做法是用复制法:Object.extend

见protpotype.js的实现方法:

复制代码 代码如下:Object.extend=function(destination,source){
for(propertyinsource){
destination[property]=source[property];
}
returndestination;
}
除此以外,还有一种不太常见的方法:Function.apply.

apply方法能劫持(<<AjaxinAction>>书中用到"劫持"一语,很生动啊)另外一个对象的方法,
继承另外一个对象的属性。
示范代码如下:
Apply示范代码
复制代码 代码如下:<script>

functionPerson(name,age){//定义一个类,人类
this.name=name//名字
this.age=age//年龄
this.sayhello=function(){alert("hello")}
}

functionPrint(){//显示类的属性
this.funcName="Print"
this.show=function(){
varmsg=[]
for(varkeyinthis){
if(typeof(this[key])!="function")msg.push([key,":",this[key]].join(""))
}
alert(msg.join("\n"))
}
}

functionStudent(name,age,grade,school){//学生类
Person.apply(this,arguments)
Print.apply(this,arguments)
this.grade=grade//年级
this.school=school//学校
}

varp1=newPerson("jake",10)
p1.sayhello()

vars1=newStudent("tom",13,6,"清华小学")
s1.show()
s1.sayhello()
alert(s1.funcName)
</script>学生类本来不具备任何方法,但是在Person.apply(this,arguments)后,他就具备了Person类的sayhello方法和
所有属性。在Print.apply(this,arguments)后就自动得到了show()方法。


本文,作为抛砖引玉,只对apply的用法(在对象继承和函数劫持方面)做个小示范,其他更深入的应用要
靠大家慢慢去领会了。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章