前端进阶面试-JS面试题(阿里、字节、腾讯、美团面试高频)

if (/* 异步执行成功 */) {

resolve(value)

} else if (/* 异步执行失败 */) {

reject(error)

}

})

myPromise.then((value) => {

// 成功后调用, 使用value值

}, (error) => {

// 失败后调用, 获取错误信息error

})

4. Promise优缺点

=========================================================================

优点: 解决回调地狱, 对异步任务写法更标准化与简洁化

缺点: 首先,无法取消Promise,一旦新建它就会立即执行,无法中途取消; 其次,如果不设置回调函数,Promise内部抛出的错误,不会反应到外部; 第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成).

极简版promise封装:

function promise () {

this.msg = ‘’ // 存放value和error

this.status = ‘pending’

var that = this

var process = arguments[0]

process (function () {

that.status = ‘fulfilled’

that.msg = arguments[0]

}, function () {

that.status = ‘rejected’

that.msg = arguments[0]

})

return this

}

promise.prototype.then = function () {

if (this.status === ‘fulfilled’) {

arguments0

} else if (this.status === ‘rejected’ && arguments[1]) {

arguments1

}

}

5. 观察者模式

====================================================================

又称发布-订阅模式, 举例子说明.

实现: 发布者管理订阅者队列, 并有新消息推送功能. 订阅者仅关注更新就行

6. 手写实现bind

=======================================================================

Function.prototype.bind = function () {

// 保存原函数

var self = this

// 取出第一个参数作为上下文, 相当于[].shift.call(arguments)

var context = Array.prototype.shift.call(arguments)

// 取剩余的参数作为arg; 因为arguments是伪数组, 所以要转化为数组才能使用数组方法

var arg = Array.prototype.slice.call(arguments)

// 返回一个新函数

return function () {

// 绑定上下文并传参

self.apply(context, Array.prototype.concat.call(arg, Array.prototype.slice.call(arguments)))

}

}

7. 手写实现4种继承

=======================================================================

function Father () {}

function Child () {}

// 1. 原型继承

Child.prototype = new Father()

// 2. 构造继承

function Child (name) {

Father.call(this, name)

}

// 3. 组合继承

function Child (name) {

Father.call(this, name)

}

Child.proto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值