诸位先看看如下代码:function Class1() {
this.yy = 33;
console.log( this );
}此时,若直接执行这个函数:Class1();将看到控制台输出了window对象,并且查看window对象下也确实看到了yy属性,可以表明此时this指向window对象。
若使用new关键字:new Class1();控制台输出了:{ yy : 33 }也就是输出了一个Class1实例对象,此时,this指向了Class1的实例对象。
目前,有个疑问就是new操作符究竟是做了什么事情,使得this指向发生了改变?
this.yy = 33;
console.log( this );
}此时,若直接执行这个函数:Class1();将看到控制台输出了window对象,并且查看window对象下也确实看到了yy属性,可以表明此时this指向window对象。
若使用new关键字:new Class1();控制台输出了:{ yy : 33 }也就是输出了一个Class1实例对象,此时,this指向了Class1的实例对象。
目前,有个疑问就是new操作符究竟是做了什么事情,使得this指向发生了改变?
anonymity.constructor = Class1;
var returnvalue = Class1.apply(anonymity);
returnvalue && (returnvalue..constructor = Class1);
return returnvalue is object? returnvalue : anonymity;可以这样看(内部机制不知道是不是这样)从上面可以看出 return 如果有return object的话 return的对象 将代替 new出来的对象
return returnvalue is object? returnvalue : anonymity;
这是可以从某个情况下推断出来的么?还是说是规范里面规定的?
这样的问题
我一般直接搜索 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实现的源代码