转载的参考博文
转载的那篇博客虽然点击不高,讲的可能也不全面。
但对于刚接触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)
console.log(a.pub_var_a)
console.log(new a().pub_var_a)
console.log(new a().pri_var_a)
pri_var_a是对象a的成员,所以可以被访问;//第一条console
pub_var_a不是对象a的成员,所以不可以被访问;//第二条
pri_var_a不是以a为构造函数的实例的成员,所以自然不能通过该实例访问;//第四条
但是,pub_var_a会因为__proto__指向而可以被所有a的构造实例访问;//第三条
这个应该被理解为JS的语言特性,源于以下几点:
1,JS以一切皆为对象,所以函数也有对象特征;
2,对象不能凭空而来,肯定是通过构造而来。对象之间应该有继承关系。
刚接触JS,还不讲不清楚这一块内容,只是觉得:因为我们需要,所以JS被设计成了这样。