function a()
{
this.value="a";
}
function b()
{
this.value="b";
a();
alert(this.value);
}b()为什么输出来的是a呢,这个是继承呢,还是内部变量的修改?

解决方案 »

  1.   

    这里的a、b都是函数,并未构成对象,也就无从谈论所谓“继承”。
    new出来的才是对象。
    new操作符会创建一个对象,将构造函数的prototype对象的方法拷贝一份到创建的对象上,并且将this指向创建的对象。
    这里a、b只是单纯的函数操作,函数里面的变量会先查找局部变量,局部中未找到this,就向上查找,如果b()位于全局环境,那么this应该指向window。
      

  2.   

    单纯的函数调用,this是当前操作的对象
      

  3.   

    <script language="javascript">
    function a()
    {
    this.value="a";
    }
    function b()
    {this.value="b";
    alert(this.value);
    a();
    alert(this.value);
    }b()
    </script>测试了哈
    的确如楼上们所说
      

  4.   

    对,alert(window.value)也是打印出a有种说法是javascrip的所有的东西都是对象,
    函数调用时,也会创建一个对象,对不对?
      

  5.   

    关键在this
    搞清楚this是什么 就没什么疑问了另外你这段代码的写法是没意义的
    代码是为了需求存在的 不要在这样的代码上浪费时间
      

  6.   

    this 永远指向当前函数的调用者
    function a()
    {
    this.value="a";
    }
    function b(){
    this.value="b";
    alert(this.value);
    a();
    alert(this.value);
    }用 xx.b()这种调用的话,调用对象是xx,b内部的this就是xx, 而b() 执行b函数,没有调用者,或者说调用者就是 window,里面的this指向window, this.value="b"之后 window就多了个value属性, 同理调用a()时候也是修改的 window.value
      

  7.   

    <script>
    function f1()
    {
    this.value="f1";
    alert(this.value);
    }function f2()
    {
    this.value="f2";
    alert(this.value);
    }
    function f3()
    {
    this.value="f3";
    var m=new f1();//f1里的this就是m,this.value就是对象m里的value
    n=f2();//这里是函数调用,f2里的this就是window
    alert(this.value);
    }
    var c=new f3();//f3里的this就是c
    alert(c.value);
    alert(window.value)
    </script>
    这是我自己写的,有点明白了,谢谢
      

  8.   


    我没看出这段代码有实现继承的目的 我只看出他要考量你对this的理解
    另外请问你所谓的机制是什么东东
      

  9.   

    1楼说的很正确。
    这里并未涉及对象继承的问题。
    楼主代码中的this实际上指向的window对象(global对象),因此几次赋值操作都是在给window.value赋值。
    如果这不是楼主想要的结果,请楼主先去了解一下 b()跟 new b()的区别。