
一、assign方式的基本概念
Object.assign() 方式用作将大部份可隐式特性的值从两个或数个源第一类导入到最终目标第一类。它将回到最终目标第一类。
Object.assign方式的第二个模块是最终目标第一类,前面的参数都是源第一类。
Object.assign方式推行的是浅复本,而并非深复本。换句话说,假如源第一类某一特性的值是第一类,所以最终目标第一类复本获得的是那个第一类的提及。
比如:
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }
二、手写promise功能代码
//定义两个函数
function myPromise(executor) {
//定义两个状态变量
let state = pending;
//定义两个结果变量
let result;
//定义两个成功回调函数
let resolveFn;
//定义两个失败回调函数
let rejectFn;
//定义两个成功回调函数数组
let resolveFnList = [];
//定义两个失败回调函数数组
let rejectFnList = [];
//定义两个then方式
this.then = function(resolve, reject) {
//将成功回调函数和失败回调函数添加到数组中
resolveFnList.push(resolve);
rejectFnList.push(reject);
//假如状态已经改变,则立即执行回调函数
if (state === fulfilled) {
resolve(result);
} else if (state === rejected) {
reject(result);
}
};
//定义两个resolve方式
function resolve(value) {
//假如状态并非pending,则不做任何操作
if (state !== pending) return;
//将状态改为fulfilled
state = fulfilled;
//将结果保存起来
result = value;
//依次执行成功回调函数
resolveFnList.forEach(fn => fn(value));
}
//定义两个reject方式
function reject(reason) {
//假如状态并非pending,则不做任何操作
if (state !== pending) return;
//将状态改为rejected
state = rejected;
//将结果保存起来
result = reason;
//依次执行失败回调函数
rejectFnList.forEach(fn => fn(reason));
}
//执行executor函数
executor(resolve, reject);
}