<script type="text/javascript"> //自定义函数,用于弹出三个参数的值 function alertFunc(str1,str2,str3){ alert(str1) alert(str2) alert(str3) } //自定义函数:根据传入的函数名,调用函数 function callAlert(functionName){ //根据函数名得到函数类型 var func=eval(functionName) //创建函数对象,并调用 new func(arguments[1],arguments[2],arguments[3]) } </script><!--编写按钮,在点击事件中调用函数--><button onclick="callAlert('alertFunc','tom','hello','world')" >测试函数调用</button>
str = "func_abc"\x0d\x0a//调用func_abc\x0d\x0aeval(str)\x0d\x0a\x0d\x0a如果要传参数,比如\x0d\x0aeval( str + "( '字符串参数', 123 )" )\x0d\x0a也可以\x0d\x0aeval( "var _function = " + str )\x0d\x0a_function( "字符串参数", 123 )\x0d\x0a没有参数就\x0d\x0a_function()JS函数调用的四种方法
1:方法调用模式
/*方法调用模式*/var myobject={
value:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()
请注意this此时指向myobject
2:函数调用模式
/*函数调用模式*/
var add=function(a,b){
alert(this)//this被绑顶到window
return a+b
}
var sum=add(3,4)
alert(sum)
请注意this此时指向window
3:构造器调用模式
/*构造器调用模式 摒弃*/
var quo=function(string){
this.status=string
}
quo.prototype.get_status=function(){
return this.status
}
var qq=new quo("aaa")
alert(qq.get_status())
javascript语言精粹一书建议摒弃这种方式
4:apply调用模式
/*apply*///注意使用了上面的sum函数
//与myobject
//这中调用方式的优点在于可以指向this指向的对象。
//apply的第一个参数就是this指针要指向的对象
var arr=[10,20]
var sum=add.apply(myobject,arr)
alert(sum)
看这个apply真正应用。bind这是一个绑定时间的函数
var bind=function(object,type,fn){if(object.attachEvent){//IE浏览器
object.attachEvent("on"+type,(function(){
return function(event){
window.event.cancelBubble=true//停止时间冒泡
object.attachEvent=[fn.apply(object)]
//在IE里用attachEvent添加一个时间绑定以后。
//this的指向不是到object对象本身所以。我们绑定的function里的this.id是无法正常工作的。
//但是如果我们用fn.apply(object)
//这里可以看出我们是把apply的第一个对象也就是this的指向变更给了object所以this.id就变成了
//object.id 可以正常工作了。
}
})(object),false)
}else if(object.addEventListener){//其他浏览器
object.addEventListener(type,function(event){
event.stopPropagation()//停止时间冒泡
fn.apply(this)
})
}
}
bind(document.getElementById("aaa"),"click",function(){alert(this.id)})