Function.prototype.myBind= function(Arg,...argArray){
let that = this
Arg = (Arg !== null && Arg !== undefined)?Object(Arg):window
function fns (...arg){
Arg.fn = that
let fin = [...argArray,...arg]
let res= Arg.fn(...fin)
delete Arg.fn
return res
}
return fns
}
实现apply
Function.prototype.myApply = function(Arg,argArray){
let that = this
Arg= Arg?Object(Arg):window
Arg.fn= that
argArray = argArray?arrArray:[]
let res= Arg.fn(...argArray)
return res
}
实现call
Function.prototype.myCall = function(Arg,...args){
let that = this;
Arg= Arg?Object(Arg):window
thisArg.fn = that
let res = Arg.fn(...arg)
delete Arg.fn
return res
}
实现一个filter
function myFilter(list, callback) {
if (!Array.isArray(list) || !list.length || typeof callback != 'function') {
return []
}
let result = []
for(let i = 0; i < list.length; i ++) {
let item = list[i];
callback(item, i, list) && result.push(item)
}
return result
}
实现map
function map(list, callback) {
if (!list.length || !Array.isArray(list) || typeof callback !== 'function') {
return []
}
const result = []
for (let i = 0; i < list.length; i++) {
const item = list[i]
result.push(callback(item, i, list))
}
return result
}
实现reduce
function myReduce(list, callback) {
if (!Array.isArray(list) || !list.length || typeof callback !== 'function') {
return []
} else {
sum = arr[0]
for (let i = 1; i < arr.length; i++) {
sum = callback(sum, list[i], i, list)
}
return sum
}
}
实现instanceof
function myInstanceof(a, b) {
if (!a || typeof a != 'object' || !b) return false
const A = a.__proto__
const B = b.prototype
if (A && B) {
return A == B
}
return false
}