文章假设你已经对面向对象语言有点了解或刚了解JavaScript 

今天看了一本叫《JQuery实战》的书,直接奔最后的附录(JavaScript必知必会),看完了才发现自己对JavaScript有很大的误解,因为自己以前用的是Java和现在用的C#都多多少少影响了自己的思维,并且语法的魔法更干扰了我的理解,所以,指出来,让大家也好理解。

JavaScript函数被认为是对象,与其他JavaScript对象类型一样,比如String,Number,Date。函数也是由JavaScript构造器来定义。所以也有称函数是一等对象。
举个例子:
平时我们是这样写的,
 
  1. function doSomethingWonderful(){   
  2.     alert('does something wonderful');   
但是我们可以这样写帮助理解上面的话,
 
  1. doSomethingWonderful = function(){   
  2.     alert('does something wonderful');   
  3. }  
这个意思是把函数指派给顶层变量(window的属性)。让我们再看更深入的,同时把this引进来说明,

  1. var o1 = { handle:'o1' };   
  2. var o2 = { handle:'o2' };   
  3. var o3 = { handle:'o3' };   
  4. window.handle = 'window';   
  5.  
  6. function whoAmI(){   
  7.     return this.handle;   
  8.    
  9. o1.identifyMe = whoAmI;   
  10.  
  11. alert(whoAmI());   
  12. alert(o1.identifyMe());   
  13. alert(whoAmI.call(o2));   
  14. alert(whoAmI.apply(o3));   

 答案是什么我想你们都猜到了(window,o1,o2,o3),在这里要注意的就是this在函数的上下文里指的是什么。调用call()和apply(),让函数表现的像是o2的方法,但其实这个函数和o2没有任何关联(连o2的属性都不是)。