JS的prototype和__proto__

来源:互联网 发布:淘宝网品种销量排行榜 编辑:程序博客网 时间:2024/05/29 13:56

转载的参考博文

转载的那篇博客虽然点击不高,讲的可能也不全面。但对于刚接触JS的朋友来说,还是清晰简洁的说明了prototype和__proto__所起的作用。1,原型链的主角是__proto__。原型链有些类似继承的概念。2,prototype是只有函数才有的。用于保存公共的属性和方法。JS中每个函数都可以作为构造函数,同时函数本身也是一个对象。它构造出来的对象的__proto__是指向构造函数的prototype的,而不是函数对象本身。JS中一切皆对象,因此函数兼具二重属性--对象和构造函数。构造函数的概念是面向所有据此构造出来的实例的。对象的概念则是面向函数自身的。举个例子
var a = function() {}a.prototype.pub_var_a = 1;a.pri_var_a = 2;console.log(a.pri_var_a);//2console.log(a.pub_var_a);//undefinedconsole.log(new a().pub_var_a);//1console.log(new a().pri_var_a);//undefined
pri_var_a是对象a的成员,所以可以被访问;//第一条consolepub_var_a不是对象a的成员,所以不可以被访问;//第二条pri_var_a不是以a为构造函数的实例的成员,所以自然不能通过该实例访问;//第四条但是,pub_var_a会因为__proto__指向而可以被所有a的构造实例访问;//第三条这个应该被理解为JS的语言特性,源于以下几点:1,JS以一切皆为对象,所以函数也有对象特征;2,对象不能凭空而来,肯定是通过构造而来。对象之间应该有继承关系。刚接触JS,还不讲不清楚这一块内容,只是觉得:因为我们需要,所以JS被设计成了这样。