JavaScript的this

  今天在看代码的时候,发现自己对this的理解还不是很透彻。

     

 1     (function(colors)
 2     {
 3         function sayHello()
 4         {
 5             console.log("private Hello");
 6         }
 7         colors.sayHello = function()
 8         {
 9             console.log("colors.sayHello");
10             sayHello();13         }
14 
15     })(window.colors = window.colors||{})

    如果,这样写,sayHello是指命名空间内的sayHello,log出来的是private Hello。可是如果改成下面这样的:

 1     (function(colors)
 2     {
 3         function sayHello()
 4         {
 5             console.log("private Hello");
 6         }
 7         colors.sayHello = function()
 8         {
 9             console.log("colors.sayHello");11             this.sayHello();13         }
14 
15     })(window.colors = window.colors||{})

  这样的sayHello指的是colors.sayHello,因此会出现不断地重复调用,直到栈溢出。这里的this,其实等价于window.colors这个。

  因此,下面的写法和上面的写法完全一样:

    (function(colors)
    {
        function sayHello()
        {
            console.log("private Hello");
        }
        colors.sayHello = function()
        {
            console.log("colors.sayHello");
            colors.sayHello();
        }

    })(window.colors = window.colors||{})

之所以会看到这个问题,是在这里:http://yuiblog.com/blog/2007/06/12/module-pattern/

 1 return  {
 2 
 3         aDragObjects: [], //a publicly accessible place to store our DD objects
 4         
 5         init: function () {
 6             //we'll defer making list items draggable until the DOM is fully loaded:
 7             yue.onDOMReady(this.makeLIsDraggable, this, true);
 8         },
 9         
10         makeLIsDraggable: function () {
11             var aListItems = getListItems(); //these are the elements we'll make draggable
12             for (var i=0, j=aListItems.length; i<j; i++) {
13                 this.aDragObjects.push(new YAHOO.util.DD(aListItems[i]));
14             }
15         }
16 
17     };

转载于:https://www.cnblogs.com/miyamoto/archive/2012/08/20/2648074.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值