JS的prototype和__proto__

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/OHRadiance/article/details/77885500

转载的参考博文

转载的那篇博客虽然点击不高,讲的可能也不全面。
但对于刚接触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);//2
console.log(a.pub_var_a);//undefined
console.log(new a().pub_var_a);//1
console.log(new a().pri_var_a);//undefined
pri_var_a是对象a的成员,所以可以被访问;//第一条console
pub_var_a不是对象a的成员,所以不可以被访问;//第二条
pri_var_a不是以a为构造函数的实例的成员,所以自然不能通过该实例访问;//第四条
但是,pub_var_a会因为__proto__指向而可以被所有a的构造实例访问;//第三条

这个应该被理解为JS的语言特性,源于以下几点:
1,JS以一切皆为对象,所以函数也有对象特征;
2,对象不能凭空而来,肯定是通过构造而来。对象之间应该有继承关系。

刚接触JS,还不讲不清楚这一块内容,只是觉得:因为我们需要,所以JS被设计成了这样。

猜你喜欢

转载自blog.csdn.net/OHRadiance/article/details/77885500
今日推荐