var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  alert(object.getNameFunc()());这里面的this为什么不是object啊?

解决方案 »

  1.   

    老问题了,全局环境下this是window,object.getNameFunc()就把function(){
            return this.name;
          }返回到全局了,所以this就是window
      

  2.   

    饿 类似问题可以以前就回答过了方法中的this指代方法的拥有者,但是你这儿的this不是在getNameFun方法中使用,而是在function(){
            return this.name;
          }这个函数中调用的,所以根据上下文指代应当是window
    如果getNameFunc : function(){
                return this.name;
         }
    这样调用时返回的就是这个object了
      

  3.   

    this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。但是总有一个原则,那就是this指的是调用函数的那个对象。
      

  4.   

    return function(){
    return this.name;
    };
    这是个匿名函数的调用,而匿名函数的执行环境具有全局限,所以你在匿名函数调用的this是指向window的。不过把getNameFunc函数作用域中的this对象保存在一个闭包函数能访问的变量里就可以让闭包访问到getNameFunc函数作用域中的this对象了。实现如下:var name = "The Window";
    var object = {
        name: "My Object",
        getNameFunc: function(){
       var that = this;
          return function(){
            return that.name;
          };
        }
      };
      alert(object.getNameFunc()());
      

  5.   

    object.getNameFunc()():相当于
    function(){
            return this.name;
          }();现在this的作用于就是window了,this指向调用当前函数的对象,默认的对象是全局对象window。所以这里就指向window了。函数调用上下文的上下文现在就是window,自己多研究下吧。this就是  调用当前函数的上下文!或者说当前函数执行的上下文(或者环境或者叫对象也行)
      

  6.   


    恩,非常对,就是现在函数执行的上下文变了,现在的上下文就是window。this现在就是执行window的。建议看一下http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
    看完应该就明白this的用法了。
      

  7.   

    我为什么发表不了啊?崩溃
    给个地址,你看完就明白了http://www.ruanyifeng.com/blog/2010/04/using_this_keyword_in_javascript.html
      

  8.   

    this引用的是当前上下文环境下的宿主。LZ基本功得努力啊。
      

  9.   


    举个例子啊:
    function Top(value){
      this.test=value;
    };
    new Top("hi");
    这个时候this指向哪里啊?
    这个test又被谁接受啊?
      

  10.   

    这儿this指向匿名对象new Top("hi"),都是回答问题帮楼主解惑,这样点名为难不合适吧
      

  11.   

    朋友应该这么写:function Top(value) {
        this.test=value;
    }
    var myObject=new Top("hi");
    new Top("hi")必须得加var myObject作为引用,光写new Top("hi")解释器会提示错误,而且也没有任何意义,因为你不能引用它。
    这个时候this指的就是myObject,你定义了test为构造函数function Top(value)的参数,并设定值等于value,所以不能说test被谁接受,是参数hi被谁接受。在这里,自然被myObject接受,即结果为myObject.test="hi";
    这个对于初学者也是比较难理解的,编程语言中有很多这样的难点,多去想,迟早你会完全理解的,而且会感觉到这种方式是如此巧妙。呵呵!
    我也是这么过来的,希望能帮助到你!