前端面试之原型链

什么是原型

每个函数都有自己的原型对象,即prototype属性。
每个对象都有__proto__属性。

原型对象的作用

用于共享属性和方法。

当一个函数是构造函数时,可以通过构造函数生成无数个对象,而如何给这些通过同一个构造函数生成的对象共享属性和方法呢?js中的做法是通过构造函数的原型对象。

构造函数 构造函数的原型对象 通过调用构造函数new出来的对象(实例对象)。三者之间的关系,是原型之所以重要的原因。即实例对象共享构造函数的原型对象上的属性,实例对象的__proto__指向构造函数的prototype属性。

什么是原型链

当构造函数的原型对象是另一个构造函数的实例时,此时就生成了原型链。

js就是通过原型链来实现继承的。即使es6中是引入了class,通过extends继承类。但它的底层还是通过原型对象实现继承。即万变不离prototype原型对象。

原型链最终都指向Object.prototype -> null

如何实现一个继承,es5 es6

如何实现c2继承c1?
c1和c2均为构造函数。
function A(c1, c2) {}

怎么实现instanceof方法

function instanseOf(a, A) {
  var l = a.__proto__; 
  var r = A.prototype;
  while(true){
    if(l === null) return false; 
    if(l === r) return true;  
    l = l.__proto__; 
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值