继随想 var之后,想了一下new
在上次的随想中,不难得出这样一个理论(不是结论,求各位大大权威给出结论):
(1)所有通过var声明的变量都会有一个隐形的属性__proto__,这个属性的指向是由等号右边决定的,但都是一个对象。
(2)每一个函数对象都有一个 prototype属性,注意这里的函数对象,包括function declaration 和 拥有该函数引用的变量。
http://www.cnblogs.com/sc-xx/archive/2012/07/08/2581428.html
接着是关于new 的猜测,这部分参考了国外的文章http://stackoverflow.com/questions/1646698/what-is-the-new-keyword-in-javascript
关于new A(),到底执行了什么,是今晚随想的重要内容,
经过测试发现(在chrome 20 中的测试),正如上面文章中说的一样,new 的操作经过了3步
(1)创建一个匿名的对象,就像 var tempt = {};
(2)取new 后面的函数的prototype属性,并将其赋值给tempt的__proto__。例如 new A(), function A() {},执行了 tempt.__proto__ = A.prototype;
(3)将tempt 做为形参,带入new 后面的函数中,这时tempt等于对应函数中的this,最后返回tempt
按照上面的理论,a和b应该是相等的,但是它们为什么不相等,没有相同,请各位大牛指教...