slumdunk 2010-01-19 22:37
浏览 191
已采纳

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

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();   
  • 写回答

4条回答 默认 最新

  • CaiHuajiang 2010-01-19 23:27
    关注

    理解方式基本同上,但是要将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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿