文章假设你已经对面向对象语言有点了解或刚了解JavaScript
今天看了一本叫《JQuery实战》的书,直接奔最后的附录(JavaScript必知必会),看完了才发现自己对JavaScript有很大的误解,因为自己以前用的是Java和现在用的C#都多多少少影响了自己的思维,并且语法的魔法更干扰了我的理解,所以,指出来,让大家也好理解。
- function doSomethingWonderful(){
- alert('does something wonderful');
- }
- doSomethingWonderful = function(){
- alert('does something wonderful');
- }
- var o1 = { handle:'o1' };
- var o2 = { handle:'o2' };
- var o3 = { handle:'o3' };
- window.handle = 'window';
- function whoAmI(){
- return this.handle;
- }
- o1.identifyMe = whoAmI;
- alert(whoAmI());
- alert(o1.identifyMe());
- alert(whoAmI.call(o2));
- alert(whoAmI.apply(o3));
答案是什么我想你们都猜到了(window,o1,o2,o3),在这里要注意的就是this在函数的上下文里指的是什么。调用call()和apply(),让函数表现的像是o2的方法,但其实这个函数和o2没有任何关联(连o2的属性都不是)。