JS的prototype和__proto__

转载的参考博文

转载的那篇博客虽然点击不高,讲的可能也不全面。
但对于刚接触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被设计成了这样。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值