看了JS的prototype和__proto__这篇文章,才感觉很清晰了,对于原型这块,以前经常把这些属性弄不清楚,
明白了之后保存下整理下:
prototype: 是函数的一个属性(每个函数都有一个prototype属性)
__proto__: 是一个对象拥有的内置属性
(prototype是函数的内置属性,__proto__是对象的内置属性)
二、new 的过程
var t= function(){}; var p = new t();
new的过程拆分成以下三步:
(1) var p={}; 也就是说,初始化一个对象p
(2) p.__proto__ = t.prototype;
(3) t.call(p); 也就是说构造p,也可以称之为初始化p
关键在于第二步,我们来证明一下:
var t= function(){}; var p = new t(); alert(p.__proto__ === t.prototype);//true
这段代码会返回true。说明我们步骤2是正确的。
三、constructor
我们知道,默认情况下,对一个函数前面使用new,可以构造出一个对象。每一个对象都有一个constructor属性,这个constructor属性指向构造出该对象的函数。
function a(x){ alert(x); } var p = new a('22'); alert(p.constructor);
结果如下:
返回的是函数a,把代码改下
function a(x){ alert(x); } var p = new a('111'); var t = p.constructor; t('222');
结果如下: