麻烦大神们讲讲这段代码的详细含义。谢谢了。

function foo(){   
    foo.abc = function(){alert('def')}   
    this.abc = function(){alert('xyz')}   
    abc = function(){alert('@@@@@')};   
    var abc = function(){alert('$$$$$$')}   
}   
foo.prototype.abc = function(){alert('456');}   
foo.abc = function(){alert('123');}   
var f = new foo();   
f.abc();   
foo.abc();   
abc();   

理解方式基本同上,但是要将function以一个object的方式理解。以下顺序执行:

[code="js"]var foo = {}; //定义一个名为foo的空方法,也是没有内容的空类
foo.prototype.abc = function(){alert('456');} //给foo类增加原型方法,效果等同于实现该类的方法都可以使用abc()--1
foo.abc = function(){alert('123');}//给foo类增加类方法,可以使用foo类直接调用--2

var f = new foo();//实现foo类,并调用foo()方法
foo = function(){
foo.abc = function(){alert('def')} //效果等同于2处方法,直接给foo类增加类方法。这个无论写在那里都一样--3
this.abc = function(){alert('xyz')} //给当前域(即foo对象),增加一个对象方法。效果与1处相同。但存在区别,这里需要先将实现foo类,生成对应的对象,在其中对象设置一个abc方法,那么每个foo对象都会有一个abc方法。而设置原型方法只会申请一处内存。--4
abc = function(){alert('@@@@@')};//全局变量,,被设置到window中,可以通过winodw.abc()或abc()访问 --5
var abc = function(){alert('$$$$$$')} //局部不可见,覆盖上面abc()方法--6
}

f.abc(); //调用的方法包括本来是2处,但被3处覆盖,显示def
foo.abc();//调用方法包括本来是1处,被4处覆盖,显示xyz
abc(); //调用方法包括本来是5处,但5处方法被隐藏,,无法调用,报错!

[/code]

lz可以这么理解
[code="js"]
function foo(){

foo.abc = function(){alert('def')} //此方法针对于类foo
this.abc = function(){alert('xyz')} //给方法针对于类foo的实例
abc = function(){alert('@@@@@')}; //局部方法 外部不可见
var abc = function(){alert('$$$$$$')} //同上
}

foo.prototype.abc = function(){alert('456');}  //此方法针对foo的原型 
foo.abc = function(){alert('123');}   //此方法针对类foo,运行到此处foo.abc的结果是123
var f = new foo();   //创建了一个foo对象,此处调用了了foo的"构造方法",foo.abc被覆盖,结果为def
f.abc();   //返回xyz
foo.abc();   //返回def
abc();  //未定义该方法

[/code]

[code="js"]
foo.prototype.abc = function(){alert('456');}
[/code]

其中以上这段代码的用处是
当foo类未定义 [code="js"] this.abc = function(){alert('xyz')} [/code]
时,

调用f.abc()则按照以下过程:
1. 查找foo的内部是否定义了abc方法 如定义,则调用;如未定义,到2
2. 查找foo.prototype,看是否定义了abc,如定义,则调用;如未定义,到3
3. 查找foo.prototype.prototype,看是否定义了abc,如定义,则调用;未定义,到4
4. 。。。直至返回Object.pototype如未定义,则返回该方法为定义的错误

因此,,1楼关于abc = function(){alert('@@@@@')};的解释是错误的。
this.abc = function(){alert('xyz')} 也不是实例方法,而是重新声明的方法,所以在内存中有不同的引用。