javascript原型与原型链

1、原型

一、prototype
在javascript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。
比如:

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

函数的prototype指向了一个对象,而这个对象正是调用构造函数时创建的实例的原型,也就是person1和person2的原型。
也就是说函数的prototype和person1的__proto__是一样的

console.log(Person.prototype == person1.__proto__);//true

在这里插入图片描述
二、proto
每个对象除了Null外都有一个属性叫做__proto__,这个属性会指向该对象的原型。

function Person() {

}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true

在这里插入图片描述
三、constructor

每个原型都有一个constructor属性,指向该关联的构造函数。

function Person() {
}
console.log(Person===Person.prototype.constructor)  //true

在这里插入图片描述

面试如何回答?
1、每一个函数都有一个prototype属性。
2、每一个实例都有一个__proto__属性
3、实例的__proto__属性指向函数的prototype

2、原型链

简单回顾一下构造函数、原型和实例对象之间的关系:每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。——摘自《javascript高级程序设计》
在这里插入图片描述
面试如何回答?

当我们访问一个函数的属性的时候,会先在本身中查找,如何没有找到就回去他的实例的__proto__中查找,即函数的prototype中查找,如何还没有找到的话就回去它的protopype的__proto__中查找,还是没有就去Obejct.prototype中查找,就这样一级一级往上,如果最后还是没有就返回undefined。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值