Here is a paper that introduce the 'Function Object' in javascript.
http://www.permadi.com/tutorial/jsFunc/index.html
我的一点理解:函数并不会和某个实体绑定,函数可以被任何地方使用,可以看成一个数值。并不像java中的类的方法一定是和类名绑定的。(这个思维转换确实有点费劲)
以代码实例述之:
1.
Engine.prototype.start = function(){
var eventEngine = this;
window.setInterval(function(){eventEngine.GetEventsInfo();},5000);
}
与
2.
Engine.prototype.start = function(){
var eventEngine = this;
window.setInterval(eventEngine.GetEventsInfo,5000);
}
差别大了,2中的window.setInterval传得第一个参数只是函数,进入GetEventsInfo()函数体后,this并不指代eventEngine,而在第一个例子中,将这样一个
引用
eventEngine.GetEventsInfo()
操作作了封装,进入GetEventsInfo()函数体内,this就是指代eventEngine了。
3.
Engine.prototype.start = function(){
var eventEngine = this;
window.setInterval('eventEngine.GetEventsInfo()',5000);
}
这是第三种可以实现的做法,因为js会去寻找这样的字符串'eventEngine.GetEventsInfo()',待找到匹配字符串的函数就会调用相应的方法,
这个特性我想不起来叫什么了(也许里面就是做了个判断
window.setInterval(fucntion , time);
if(function=='Function()'){
//...
}else{
//find the String in Function stack;
var result = search('function');
if(result){
//...
}
else{
//error!
}
}
)