请问下面的function里的两行有什么区别?var a = 1;
var b = 2;function changeValue(){
  a = b;
  this.a = this.b;
}

解决方案 »

  1.   


    var a = 1;
    var b = 2;function changeValue(){
      a = b;//上面的也可以说window.a=window.b;
      this.a = this.b;//changeValue的属性a和b
    }
    changeValue();
    alert(window.a);//输出2
    alert(changeValue.a);//undefined因为没有赋值
    function changeValue(){
      a = b;//上面的也可以说window.a=window.b;
      this.a = this.b;//changeValue的属性a和b
    }
    changeValue();
    alert(window.a);//输出2
    alert(changeValue.a);未定义因为没有赋值
      

  2.   


    var a = 1;
    var b = 2;function changeValue(){
      a = b;//上面的也可以说window.a=window.b;
      this.a = this.b;//changeValue的属性a和b
    }
    changeValue();
    alert(window.a);//输出2
    alert(changeValue.a);//undefined因为没有赋值
      

  3.   

    this指向离他最近的function,如果没有function,则指向windowfunction changeValue(a){
      this.a = a;
    }var test = new changeValue(1);
    alert(test.a);
      

  4.   

    this可不是指代什么最近的function。this必然生存在function里,怎么会没有function?js里function有两种用法,作为任何对象的方法,或者单纯作为函数,当function作为任何对象方法使用时,this指代该对象,如果该function没有挂靠在任何对象下,javascript规定,其this是指window。参看我的文章
    http://iamduyu.cn/?p=708
      

  5.   

    引用你的话:
    this必然生存在function里,怎么会没有function
    如果该function没有挂靠在任何对象下,javascript规定,其this是指window自相矛盾。
      

  6.   

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript">
    alert(this === window);</script>
    </head>
    <body></body>
    </html>上面这个this有function吗?
      

  7.   


    function getName() {
    alert(this.name);
    } function Test() {
    this.getName = getName;
    } var test = new Test();
    test.name = '123';
    test.getName();
    你的话里有提到这种情况,这里第一个getName里的this指向最近的函数getName,但是在Test里,
    getName又指向了Test的this
    所以this链为 getName->Test.getName
    这是用this实现对象冒充,是javascript实现继承的方法之一。
      

  8.   

    你要这么编程我也没辙。编程就是程序员的表达。任何oop的语言里,this都不应该脱离具体对象而独立存在,这么用this就好象给了一段没头没尾的充满代词的段落,但该代词代什么不知所云,最要命的是作者认为无需交代。var obj={};
    obj.method1=function(){this;};
    this是指代method1这个function还是obj?
    所以,this指代的是function挂靠的对象,而不是this生存所在的function本身,这是很根本的概念。
      

  9.   


    大哥我真服了你,我以为你blog里不写继承是你漏了,原来你不知道javascript的继承(对象冒充)。所以你一直不承认javascript的类概念
    建议你打开www.baidu.com,键入对象冒充。
      

  10.   

    什么叫“this链”, this chain?这又是在自造概念,js里只有scope chain。而且scope chain也不是js程序员管理的,是js的解析器管理的这么一个数据结构。所有的js对象由于scope和重名现象的存在,必然要解决指代哪一个的问题,scopre chain就是解决这个问题。对this来说,它在运行的时候,它指代的不是a就是b不可能是一个“chain”。
      

  11.   

    我都解释的那么清楚了
    第一个getName中的this->第二个Test中的this->实例化test这个是this运行的顺序。
      

  12.   

    第一个getName中的this->第二个Test中的this->实例化对象test
      

  13.   

    你问任何有过静态类型语言经历的人,说js里有class吗?估计你没玩过c++,自然是什么话都敢说。prototype最根本来说是一个design pattern。通俗来说就是copy。说白了js里的对象,都是对象copy对象出来的,何谈class?flash的actionscript里才有class,建议你去看看。class关键字进入js标准是js2.0的事儿了,这是后话。所谓的对象冒充我真不知道什么概念,我看的js都是英文,这个概念对应的英文是什么?
      

  14.   


    一定要用class关键字的才叫class?你javascript代码用过new哇。
    new Object()这种代码用过?
    那alert(Object);打出来什么啊。你看过?
    打出来的是
    function Object{native code}javascript有类概念,这有什么好争得。没有类,哪来对象。
    一味的强调对象,却否定类概念的存在,我服了
      

  15.   

    class和对象的关系好比中国的父子关系,我老子啥样,你儿子就必须啥样,我有prop1,你也得有,我有method1,你也得有,否则反了不是。c++里就这样。这样做的好处是,约束多了,编译器可以对代码做更多的检测,出来的汇编代码效率更高。prototype和对象的关系好比老外的父子关系,老子我只负责生你,你后面爱啥样啥样,我有prop1,你生的时候有,你长大了有没有我不管,也管不着。js里不就这样,prototype出来,完了填两个property,删两个property不是很正常。js作为上世界90年代产物,class和prototype概念早都有了,设计者没用class而用prototype来命名,显然是有一定考虑的。这也是我反对引入class关键字的原因,没有必要,有些人比较痒痒,上一辈管少了,他还不乐意。new关键字后面跟的叫做constructor,是function object.
      

  16.   

    class和对象的关系不是父子关系举个简单的例子,人是一个类,而你和我是人类中的一个对象。都具有眼睛,手,脚这些属性,同时又具有吃,看这些方法。
      

  17.   

    这个。。
    全部看下来了,
    书上有这么1句话,
    JS里所有的function都是继承与object类
      

  18.   

    this是js中最为诡异的东西,和传统OOP软件完全不一样,具体见《javascript 真经》这本书,要弄明白是很麻烦的,我比较笨,通常是具体软件中,尽量不要this来this去,如果要作为对象对外提供接口时,拿不准时,alert看看,正确了继续写,嵌套时,把this保存起来,例如:
    function aa()
    {
      var mySelf=this;
      this.Name='xyz';
      
      function bb()
      {
        alert(mySelf.Name);
       }
    }
    这样就不容易混乱了