诸位先看看如下代码:function Class1() {
    this.yy = 33;
    console.log( this );
}此时,若直接执行这个函数:Class1();将看到控制台输出了window对象,并且查看window对象下也确实看到了yy属性,可以表明此时this指向window对象。
若使用new关键字:new Class1();控制台输出了:{ yy : 33 }也就是输出了一个Class1实例对象,此时,this指向了Class1的实例对象。
目前,有个疑问就是new操作符究竟是做了什么事情,使得this指向发生了改变?

解决方案 »

  1.   

    还有一个问题就是如果构造函数return了一个什么东西,那么使用new关键字之后,返回的就是构造函数return的东西了,那么是不是说,如果构造函数没有return的时候,默认return本身呢?还有这现象是不是意味者构造函数千万不能return什么东西?
      

  2.   

    又试了一下发现,若构造函数有返回值的话,并不是构造函数返回什么,new操作符就返回什么,只有当构造函数return一个object时( typeof操作符返回object的object ),才会得到构造函数return的东西。
      

  3.   

    new Class1 ->var anonymity = {};
    anonymity.constructor = Class1;
    var returnvalue = Class1.apply(anonymity);
    returnvalue && (returnvalue..constructor = Class1);
    return returnvalue is object? returnvalue : anonymity;可以这样看(内部机制不知道是不是这样)从上面可以看出 return 如果有return object的话  return的对象 将代替 new出来的对象
      

  4.   

    主要是这个最后一步:
    return returnvalue is object? returnvalue : anonymity;
    这是可以从某个情况下推断出来的么?还是说是规范里面规定的?
      

  5.   


    这样的问题
    我一般直接搜索   js new  你会看到各种回答  把大家回答的共同点理一下看了各种回答后心里差不多有底了然后 我会直接在  浏览器 js控制台中测试
    function t(){ this.t = 't';  }
    function t(){ this.t='t';  return null; }
    function t(){ this.t = 't'; return 3; }
    function t(){ this.t = 't'; return {'o':'o'} }var t1 = new t(); 分别测试
    看看 t1 是什么最后差不多能感觉new是什么作用了(至少知道了 return object 和不retuan object的区别把)
    中间的判断 直接猜测老 猜错了也没什么 代码看的是过程控制和执行结果另外这个事情貌似没什么好深究的 深究的话就是直接看js实现的源代码
      

  6.   

    this对象是在运行时基于函数的执行环境绑定的,在全局函数中,this登云window,而函数作为某个对象的方法调用的时候,this就是这个对象所以和构造函数只是改变了其调用对象
      

  7.   

    好吧,还是非常感谢你哈,可能跟个人习惯有关系吧,就好比我用类库的时候,要是看到某些方法不知道类库是怎么实现的,我就会非常难受,一定要看明白类库是如何实现的,这样才能安心去用这个方法,网上的帖子文章什么的,我也都找了,但是貌似没有一篇讲到了return object那个,并且ECMAScript规范里面似乎也没说明,所以特定来问问,还是多谢了哈。