jtandygod 2013-04-11 21:17 采纳率: 100%
浏览 218
已采纳

javascript:这里的this所示变量还有什么实际意义呢?

this方法有什么用呢?这种方法必须要有具体的绑定对象才能调用的呀,但是由于是匿名函数自执行,还有绑定对象么?写this属性还有意义么?
[code="java"]ClassID=(function(){  
     var id =0 ; //私有的那个值  静态私有属性   
     this.get1=function(){
         return id;
     };
     return function (){ //外层函数返回一个有权访问私有值的嵌套的函数,就是我们保存在ClassID中的嵌套函数  
         this.getId=function(){
             get1();
         }
     };   
})();  

ClassID.get3=function(){
     return get1();
}
alert(ClassID.get3());//0
[/code]
但是这段书上代码竟然可用 我实在是不理解了 求解

  • 写回答

4条回答 默认 最新

  • iteye_9831 2013-04-12 09:14
    关注

    [quote]this方法有什么用呢?这种方法必须要有具体的绑定对象才能调用的呀,但是由于是匿名函数自执行,还有绑定对象么?写this属性还有意义么?[/quote]

    楼主说的是对的,就这段代码来说,里面的this完全没用。

    这段代码能正常运行,完全因为里面的this其实就是window对象。在楼主给出的代码里,把this去掉(或者把this改成window),效果相同。(因为默认的作用域对象还是window)

    所以说,楼主的结论:自执行的匿名函数,写this没有意义。是正确的。

    总之,这是一段非常混乱的代码:

    那个return的function完全是废物代码,没用。
    [code="javascript"]ClassID=(function(){

    var id =0 ; //这个id的确只局限于匿名函数内有效

    this.get1=function(){//这儿的this就是window
    return id; //因为get1函数被赋值在window上,所以形成了一个闭包,从而在离开了匿名函数的执行范围以后id变量仍然存活,可以通过闭包来访问
    };

    return function (){}; //这儿只是个普通对象而已,下面没执行这个函数

    })();

    ClassID.get3=function(){ //ClassID是个函数,函数也是个对象,对象也可以赋值,在ClassID对象上增加一个函数get3
    return get1(); //这儿访问的是window.get1()
    }

    alert(ClassID.get3());//0 [/code]

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

报告相同问题?

悬赏问题

  • ¥100 需求高精度PT100设计电路和算法
  • ¥15 单片机配网,继电器开关,广播
  • ¥60 Qcustomplot绘制实时动态曲线
  • ¥20 运用matlab画x-y图
  • ¥15 用idea运行项目,运行tomcat报错:断言失败
  • ¥15 Sqlserver查询链接服务器数据问题
  • ¥15 Bibtex4Word 引用中文文献
  • ¥20 用opencv c/c++ 转换成灰度图,然后做一下直方图均衡,输出mp4文件
  • ¥20 matlab中的双层数值积分
  • ¥50 服务器打印水晶报表问题