原型对象和原型链

原型对象和原型链

总的来说:
1、prototype是函数才有的属性
2、__proto__是每个对象都有的属性
(__proto__不是一个标准属性,只是部分浏览器实现了此属性,对应的标准属性是[[prototype]])

一、原型对象

function A(){//创建一个构造函数

}

A.prototype.testa = "aaaaa";
let a1 = new A();
let a2 = new A();
let a3 = new A();

console.log(a1.testa);
console.log(a2.testa);
console.log(a3.testa);
//解释:通过实例对象来访问testa,a1、a2、a3都能访问到原型对象上的方法。
(这就是为什么推崇原型下编程)。

a1.testa = "bbbbb";
//这时候单独把a1的testa属性改成“bbbbb”,这只是单纯的把a1自己属性改成“bbbbb”,原型下的属性是不会受到影响的。

二、原型链

[].toString();
console.log(Array.prototype);//原型下有toString方法;

//但是
function A(){

}
var a = new A();
console.log(a.toString);//也存在也能使用,但是
console.log(a.prototype)//下面没有toString方法,那他为什么能使用呢?
//正是因为原型链的存在才能使用原型链上的toString方法。

console.log(a.prototype.__proto__);//下面九就有toString方法;

//强调(a.prototype)原型对象也是一个对象,所以往上找原型对象下的原型对象下就有能够使用的方法。

a.prototype.__proto__ == Object.prototype 
//解释:通俗来说a.prototype是Object的一个实例,也就是new 了一个Object。

原型链图解:
构造函数的prototype == new出来的对象的__proto__。
在这里插入图片描述

草图:
image.png

如有错误请指正…
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值