码迷,mamicode.com
首页 > Web开发 > 详细

JS的prototype和__proto__、constructor

时间:2016-11-15 01:21:34      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:prot   span   ges   hive   技术   情况   class   alert   cti   

看了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

标签:prot   span   ges   hive   技术   情况   class   alert   cti   

原文地址:http://www.cnblogs.com/bruce-gou/p/6064057.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!