原型和原型链

1. 什么是原型

在javascript中,每一个构造函数的内部都有一个 prototype 属性,它的属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当使用构造函数新建一个对象后,在这个对象的内部将包含一个指针,这个指针指向构造函数的 prototype 属性对应的值,在 ES5 中这个指针被称为对象的原型。

2. 获取原型对象的方法
  • Object.getPrototypeOf() — 推荐使用
  • 实例对象.__proto__— 不推荐使用
  • 构造函数.prototype
function Person() {
    this.name = 'xiong'
    this.age = 22
    this.getAgeAdd = () => {
        console.log(this.age + 1)
    }
}
let person1 = new Person()
console.log(person1.name, person1.age) // xiong 22
person1.getAgeAdd() // 23
let isTrue = Person.prototype === Object.getPrototypeOf(person1)
console.log(isTrue) // true
3. __proto__(隐式原型)和prototype(显式原型)
3.1 显示原型
  • 函数都有自己的prototype属性(回调函数除外,它没有prototype属性),即显示原型。这个属性指向原型的对象。
  • 函数都有一个显示原型和一个隐式原型
3.2 隐式原型
  • 实例对象都有一个内置属性[[prototype]],通过有__proto__属性访问,__proto__即隐式原型。
  • 在ES5之前没有定义标准,在浏览器中可以使用__proto__(非标准)去访问,目前使用ES6新增的对象Object.getPrototypeOf() 和Object.setPrototypeOf()去访问和设置原型对象。
3. 什么是原型链

当访问对象中的属性和方法的时候,如果在当前对象中无法找到,就会到对象的原型对象中查找。原型对象也有自己的原型,就这样顺着原型向上一直找,就形成了一条原型链。

4. 原型链的终点是什么

null

5. 扩展
5.1 new 操作符过程
  • 第一步:创建一个空对象{}
  • 第二步:将构造函数的prototype属性,赋给对象的__proto__属性
  • 第三步:执行构造函数,将this绑定到对象上
  • 第四步:根据构造函数返回值判断,如果返回原始值类型则忽略
    注意:回调函数没法new 对象,它没有自己的prototype属性,也没有属于自己的this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值