日期:2014-05-16  浏览次数:20409 次

请教个关于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出来的对象
------解决方案--------------------
一是看语法说明
二是看执行结果的反馈(这个是比较真实和重要的)