js原型以及原型链

本来是想写闭包的,但是发现还是没完全理解,资料也看得一脸懵,还是退而求其次,写个原型,原型链吧,闭包的话之后再写,容我先看懂

原型,原型链,不知道现在的面试还会不会问

原型

每个构造函数都有一个prototype属性,指向函数的原型对象

每个对象都有一个_proto_属性,并且指向prototype原型对象

以下的代码你会发现

Animal.prototype === animal._proto_

Animal.prototype.constructor === Animal
function Animal(name, sex) {
    this.name = name
    this.sex = sex
    this.sayHi = function() {
        console.log('hi')
    }
}

const animal = new Animal('dog', 'male')

针对原型的话,记住上面那个差不多了。

原型链

写个小栗子,以数组为例

const array = [1,2,3,4,5]

array.toString()

array.valueOf()

这两个方法,会发现我们当前定义的array并没有定义方法,所以他是怎么来的呢

首先正常先查看 array._proto_

发现toString()方法找到了,但是发现valueOf方法还是没有找到

点开下方的[[prototype]],这个是array.prototype._proto_

发现找到了valueOf

所以查询一个方法的时候,我们应该是以下操作

1. 看下当前对象是否有这个方法

2. 没有的话向上查找当前对象的__proto__,找到构造函数的原型,如果是数组的话是查询Array.prototype看是否有该属性或者方法

3. 如果还是没有,继续向上查找

最终查到Object.prototype.__proto__ === null 查找结束

 

 

以上就是原型链。

原型链的应用的话,可以拓展插件,增加全局方法等,具体情况具体实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值