小议Function.apply() 之一------(函数的劫持与对象的复制)
小议Function.apply() 之一------(函数的劫持与对象的复制)
发布时间:2016-12-30 来源:查字典编辑
摘要:关于对象的继承,一般的做法是用复制法:Object.extend见protpotype.js的实现方法:复制代码代码如下:Object.ex...

关于对象的继承,一般的做法是用复制法: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的用法(在对象继承和函数劫持方面)做个小示范,其他更深入的应用要

靠大家慢慢去领会了。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类