前端面试题汇总(二)(持续更新中...)

JS进阶:

1.bind,call,apply区别:

call和apply都是为了改变this的指向。作用都是相同的,只是传参的方式不同。

除了第一个参数外,call可以接收一个参数列表,apply只能接收一个参数数组。

let a = {
    value: 1
}

function getValue(name,age){
    console.log(name)
    console.log(age)
    console.log(this.value)
}

getValue.call(a,'clancy','21')
getValue.apply(a,['clancy','21'])

bind和其他两个方法作用也是一致的,只是该方法会返回一个函数。并且我们可以通过bind实现柯里化。

2.原型和原型链:

原型:

(1)所有引用类型都有一个_proto_(隐式原型)属性,类似于链表中的next指针,链表可以通过.next访问下个元素,原型中可以通过._proto_访问上一级元素。

(2)所有类都有一个ptototype(原型)属性,例如:Object,Array,Function

(3)所有引用类型的_proto_属性指向它构造函数的prototype 例如:arr是一个数组实例,那么arr._proto_=Array.prototype

原型链:

当访问一个对象的某个属性时,会先在这个对象本身上查找,如果没有找到,则会去它的_proto_上找,即它构造函数的prototype,如果没有找到就会继续在构造函数prototype的_proto_中找,这样一层一层向上查找就会形成一个链式结构,我们成为原型链。

例如:

arr为Array的一个实例

arr._proto_=Array.prototype

Array._proto_=Object.prototype

arr._proto_._proto_=Object.prototype

面试题:instanceof的原理,并用代码实现

分析:如果A沿着原型链能找到B.prototype,那么 A instanceof B为true(用_proto_来找)

解法:遍历A的原型链,如果找到B.prototype,返回true,否则返回false

const instanceof = (A,B) =>{
    let p = A
    while(p){
        if(p===B.prototype){return true}
        p=p._proto_
    }
    return false
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值