(function() {
var obj = {};
var z = 'zhangsan';
obj.showName = function() {
alert(this);
};
window.ar = obj.showName;
})();
ar();
................1
var obj = {};
var z = 'zhangsan';
obj.showName = function() {
alert(this);
};
obj.showName();..................2
为什么1得到的是window 2得到的是object
1为什么不是object呢,应该是obj啊,obj是调用者

解决方案 »

  1.   

    1,ar(); 可以改写与  window.ar(); 
      

  2.   


    (function() {
            var obj = {};
            var z = 'zhangsan';
            obj.showName = function() {
                alert(this);
            };
            window.ar = obj;
    })();
    ar.showName();obj 被释放了  showName没有了父级  被指向了window
    改了下 你的例子  这个指向的是object 了
      

  3.   

    事实就是如此,函数中的this由调用者决定
    作为obj的方法调用this指向obj,直接调用(相当于作为window的方法调用)则this指向window,能够理解吧?
      

  4.   

    window.ar = obj.showName;
    这句话的意思是将 obj.showName;这个函数复制一份到window.ar上面,
      

  5.   

    window.ar = obj.showName;
    我把这个理解成把obj赋给ar了
      

  6.   

    对的,你把 obj的方法扔给了了window 所以
      

  7.   

    在代码1中:
    window.ar = obj.showName;这一句使得window.ar和obj.showName最后都指向同一个函数==
    ==>function() { alert(this);}。
    而函数中的this是啥完全取决于函数真正执行时的那条语句:
    window.ar()//这是函数作为window的属性调用,this就是window
    obj.showName()//这是函数作为obj的属性调用,this就是obj