Promise.all = function(promises) {
return new Promise(function(resolve, reject) {
var result = []
var count = 0
var promiseNum = promises.length
if (promises.length === 0) resolve([])
for (let i = 0; i < promiseNum; i++) { Promise.resolve(promises[i]).then(function(val) {
count++
result[i] = val
if (count === promiseNum) resolve(result)
}, function(error){
reject(error)
})
}
})
}
2. promise.race
Promise.race = function(promises) {
return new Promise(function(resolve, reject){
for (var i; i < promises.length; i++) {
Promise.resolve(promises[i]).then(function(data){
resolve(data)
}, function(error) {
reject(error)
})
}
})
}
3. Object.create
_create = function(proto, properties) {
// 新申明一个函数
var F = function() {}
// 将函数的原型指向proto
F.prototype = proto
// 返回这个函数的实力化对象
var o = new F()
if (typeof properties === 'object') {
Object.defineProperties(o, properties)
}
return o
}
4. new
function _new(Con, ...args) {
//1.创建一个空的简单JavaScript对象(即car = {});
let obj = {}
// 2.将构造函数的作用域赋给新对象(因此this就指向了这个对象);
Object.setPrototypeOf(obj, Con.prototype)
// obj.constructor.prototype === obj.__proto__ === Con.prototype
// 3.相当于调用构造函数Car,并拿到构造函数返回的结果(执行构造函数中的代码(为这个新对象添加属性))
let result = Con.apply(obj, args)
// 4. 如果构造函数返回的结果是object,则用构造函数的结果作为返回值;否则返回这个临时对象(也就是this),这个临时对象的原型链指向该构造函数
return result instanceof Object ? result : obj
}
5. map
Array.prototype.map = function(fn) {
if(this===null || underfined){
throw '输入不能为null或者underfinded'
}
let res = []
for (let i=0; i<this.length; i++) {
res.push(fn(this[i], i, this))
}
return res
}
6. filter
Array.prototype.filter = function(fn) {
if(this===null || underfined){
throw '输入不能为null或者underfinded'
}
let res = []
for (let i = 0; i <this.length; i++) {
if (fn(this[i],i,this)) {
res.push(this[i])
}
}
return res
}
function throttle(fn, delay) {
let ts = null
return function() {
if (!ts) {
ts = setTimeout(() => {
fn.call(this, ...arguments)
ts = null
}, delay)
}
}
}
11. call
Function.prototype.call = function(context) {
if(typeof this !== 'function') {
throw new TypeError(`${this} is not a function`)
}
context = context || window;
context.fn = this
const args = [...arguments].slice(1)
const result = context.fn(...args) delete
context.fn
return result
}
12. apply
Function.prototype.apply = function(context) {
if (typeof this !== 'function') {
throw new TypeError(`${this} is not a function`)
}
context = context || window;
context.fn = this
let result
if (arguments[1]) {
result = context.fn(...arguments[1])
} else {
result = context.fn()
}
delete context.fn
return result
}
13. bind
Function.prototype.bind = function(context) {
if (typeof this !== 'function') {
throw new TypeError(`${this} is not a function`)
}
context = context || window
context.fn = this
const args = [...arguments].slice(1)
return function F() {
// 如果调用了new
if (this instanceof F) {
return new context.fn(...args, ...arguments)
}
return context.fn(args.concat(...arguments))
}
}
1. promise.allPromise.all = function(promises) { return new Promise(function(resolve, reject) { var result = [] var count = 0 var promiseNum = promises.length if (promises.length === 0) resolve([]) for (let i = 0; i < promis