原型和原型链

一、什么是原型
原型:每一个javascript对象(除null外)创建的时候,都会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中’继承’属性。
例如:

var Obj=new Object();

创建一个对象的时候都会同时关联一个对象,关联的这个对象就是新建的对象obj的原型请添加图片描述
二、prototype
在Javascript中,每一个函数或者对象都有一个prototype属性,该属性指向函数的原型对象。
当用该函数构造出一些对象之后,这些对象也继承了原型对象上的属性

function Person(){}
Person.prototype.name='protoName'
var person1=new Person()
console.log(persson1.name) //protoName

person1由于本身没用name这个属性,所以它会去构造函数Person找,而Person函数本身也没有name属性,所以会去Person.prototype上面去找,也就是去Person的原型上面找,这就是最基本的原型链了。
请添加图片描述
三、proto
每一个对象都有一个__proto__属性,他指向该对象的原型

function Person(){}
var person1=new Person()
console.log(person1.__proto__===Person.prototype) //true

请添加图片描述
四、constructor
每个 原型 都有一个constructor属性(也就是说,constructor是存在于prototype上面的属性),指向该关联的构造函数

function  Person(){}
var person1=new Person()
console.log(Person.prototype.constructor====Person) //true
console.lof(Person.prototype.constructor===person1.constructor) //true

由于person1本身没有constructor属性,所以会沿着原型链向上查找(构造函数Person上面),而构造函数的原型上就有constructor属性,也就是
person1没有constructor属性–>查找Person的constructor属性,
Person没有constructor属性–>查找Person.prototype的constructor属性请添加图片描述
五、原型的原型
原型是对象创建的时候关联的另一个对象,那么原型也是一个对象,既然是对象那么原型也应该关联一个对象是原型的原型
那么原型对象创建的时候也会关联一个对象

function Person(){}
var person1=new Person()
console.log(Person.__proto__ === Function.prototype) // true
console.log(Person.prototype.__proto__ === Object.prototype) // true

请添加图片描述

原型链
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型的对象的内部指针,那么假如我们让原型对象等于另一个类型的实例。显然,此时的原型对象将包含一个指向另一个原型的指针,相应的,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。
也就是说假如函数A的原型是函数B的实例对象,而函数B的原型是函数C的实例对象,函数C的原型是函数D的实例对象,那么ABCD就构成了一个原型链
此时如果函数A的实例对象需要去找一个属性X,在函数A找不到的时候,就去函数A的原型上面找,再找不到就去函数B的原型上面找。也就是沿着原型链一层一层查找

请添加图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值