0
点赞
收藏
分享

微信扫一扫

【前端面试题】原型和原型链-js

【前端面试题】原型和原型链-js

原型

  1. 所有引用类型都有一个__proto__ (隐式原型)属性,属性值是一个对象;
  2. 所有函数都有一个prototype (显示原型)属性,属性值是一个对象;
  3. 所有引用类型的__proto__属性指向它构造函数的prototype,它们其实是同一个对象(下列代码最后一行)
//定义一个构造函数
function Demo() {
this.a = 1
this.b = 2
}
//创建一个Demo的实例对象
const d = new Demo()

console.log(Demo.prototype) //显示原型属性
console.log(d.__proto__) //隐式原型属性
console.log(Demo.prototype === d.__proto__)  //返回ture

一般通过 构造函数.prototype 来追加属性、方法,实例对象就可以访问了。
好处是当一个构造函数有多个实例对象时,所有实例对象都可以使用,实现代码的复用。

//通过显示原型属性操作原型对象,追加一个x属性,值为99
Demo.prototype.x = 666
console.log(d.x) //返回666

原型链

刚刚说过,原型的属性值是一个普通的对象,那么这个对象又会有__proto__属性,只要有对象就会又有__proto__属性…
那什么时候到头呢?
我们知道,js基本数据类型中的引用类型只有object。所以,最后会到object的__proto__,其值为null。
在这里插入图片描述

当一个实例对象调用属性或方法时,如果自身没有,则会去原型上找,原型没有则去原型的原型上找,一层一层向上查找形成一个链式结构,称为原型链

举报

相关推荐

0 条评论