es5如何实现promise_完美起航

61.new的原理是什么?通过new的方式创建对象和通过字面量创建有什么区别?

new:

创建一个新对象。

这个新对象会被执行[[原型]]连接。

将构造函数的作用域赋值给新对象,即this指向这个新对象.

如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。

function new(func) {

lat target = {};

target.__proto__ = func.prototype;

let res = func.call(target);

if (typeof(res) == "object" || typeof(res) == "function") {

return res;

}

return target;

}

字面量创建对象,不会调用 Object构造函数, 简洁且性能更好;

new Object() 方式创建对象本质上是方法调用,涉及到在proto链中遍历该方法,当找到该方法后,又会生产方法调用必须的 堆栈信息,方法调用结束后,还要释放该堆栈,性能不如字面量的方式。

通过对象字面量定义对象时,不会调用Object构造函数。

62.prototype 和 proto 区别是什么?

prototype是构造函数的属性。

__proto__是每个实例都有的属性,可以访问 [[prototype]] 属性。

实例的__proto__与其构造函数的prototype指向的是同一个对象。

function Student(name) {

this.name = name;

}

Student.prototype.setAge = function(){

this.age=20;

}

let Jack = new Student('jack');

console.log(Jack.__proto__);

//console.log(Object.getPrototypeOf(Jack));;

console.log(Student.prototype);

console.log(Jack.__proto__ === Student.prototype);//true

63.使用ES5实现一个继承?

组合继承(最常用的继承方式)

function SuperType() {

this.name = name;

this.colors = ['red', 'blue', 'green'];

}

SuperType.prototype.sayName = function() {

console.log(this.name);

}

function SubType(name, age) {

SuperType.call(this, name);

this.age = age;

}

SubType.prototype = new SuperType();

SubType.prototype.constructor = SubType;

SubType.prototype.sayAge = function() {

console.log(this.age);

}

64.取数组的最大值(ES5、ES6)

// ES5 的写法

Math.max.apply(null, [14, 3, 77, 30]);

// ES6 的写法

Math.max(...[14, 3, 77, 30]);

// reduce

[14,3,77,30].reduce((accumulator, currentValue)=>{

return accumulator = accumulator > currentValue ? accumulator : currentValue

});

65.ES6新的特性有哪些?

新增了块级作用域(let,const)

提供了定义类的语法糖(class)

新增了一种基本数据类型(Symbol)

新增了变量的解构赋值

函数参数允许设置默认值,引入了rest参数,新增了箭头函数

数组新增了一些API,如 isArray / from / of 方法;数组实例新增了 entries(),keys() 和 values() 等方法

对象和数组新增了扩展运算符

ES6 新增了模块化(import/export)

ES6 新增了 Set 和 Map 数据结构

ES6 原生提供 Proxy 构造函数,用来生成 Proxy 实例

ES6 新增了生成器(Generator)和遍历器(Iterator)

66.promise 有几种状态, Promise 有什么优缺点 ?

promise有三种状态: fulfilled, rejected, pending.

Promise 的优点:

一旦状态改变,就不会再变,任何时候都可以得到这个结果

可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数

Promise 的缺点:

无法取消 Promise

当处于pending状态时,无法得知目前进展到哪一个阶段

67.Promise构造函数是同步还是异步执行,then呢 ?promise如何实现then处理 ?

Promise的构造函数是同步执行的。then 是异步执行的。

68.Promise和setTimeout的区别 ?

Promise 是微任务,setTimeout 是宏任务,同一个事件循环中,promise.then总是先于 setTimeout 执行。

69.如何实现 Promise.all ?

要实现 Promise.all,首先我们需要知道 Promise.all 的功能:

如果传入的参数是一个空的可迭代对象,那么此promise对象回调完成(resolve),只有此情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值