继随想 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应该是相等的,但是它们为什么不相等,没有相同,请各位大牛指教...

posted @ 2012-07-21 01:19  shawnXiao  Views(306)  Comments(0Edit  收藏  举报