请教个关于js面向对象的问题
诸位先看看如下代码:
function Class1() {
this.yy = 33;
console.log( this );
}
此时,若直接执行这个函数:
Class1();
将看到控制台输出了window对象,并且查看window对象下也确实看到了yy属性,可以表明此时this指向window对象。
若使用new关键字:
new Class1();
控制台输出了:
{ yy : 33 }
也就是输出了一个Class1实例对象,此时,this指向了Class1的实例对象。
目前,有个疑问就是new操作符究竟是做了什么事情,使得this指向发生了改变?
------解决方案--------------------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出来的对象
------解决方案--------------------一是看语法说明
二是看执行结果的反馈(这个是比较真实和重要的)