JS的prototype和__proto__constructor
Posted 浅唱年华1920
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS的prototype和__proto__constructor相关的知识,希望对你有一定的参考价值。
看了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\');
结果如下:
以上是关于JS的prototype和__proto__constructor的主要内容,如果未能解决你的问题,请参考以下文章
js 最容易理解的原型链 prototype和_proto_
js 最容易理解的原型链 prototype和_proto_