JavaScript函数polyfill系列
Posted 今天天气真好
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript函数polyfill系列相关的知识,希望对你有一定的参考价值。
本文章通过重写ES6各个关键函数,增进自己对javascript的理解。
1.bind函数
Function.prototype.bind = function(){
let thisFun = this
//获得绑定对象
let targetObj = arguments[0]
//获得原来的参数
let args = Array.prototype.slice.call(arguments,1)
if(typeof thisFun !== \'function\'){
throw new TypeError(\'The first argument is not a function!\')
}
return function(){
//获得新传入的参数
let args2 = Array.prototype.slice.call(arguments)
//返回新函数需求的结果
return thisFun.apply(targetObj,[...args,...args2])
}
}
参考文档:
https://developer.mozilla.org...
2.new函数
let _new = function(fn,_args){
let args = [].slice.call(arguments)
let cons = args.shift()
//B=Object.create(A)返回的是一个空的对象,只不过它的_proto_指向了A,也就是说B的所有属性和方法都是从原型链上找A要的,如果用hasOwnProperty去查,那么它什么都没有
obj = Object.create(cons.prototype)
cons.apply(obj,args)
return obj
}
Person.prototype.toA = ()=>{return 5}
function Person(age){this.age = age}
let p = _new( Person,10)
参考文档:
https://wangdoc.com/javascrip...
3.Object.create函数
Object.create2 = function(obj){
function F(){}
F.prototype = obj
return new F()
}
Person.prototype.toA = ()=>{return 5}
function Person(age){this.age = age}
let p = new( Person,10)
let o = Object.create2(p)
以上是关于JavaScript函数polyfill系列的主要内容,如果未能解决你的问题,请参考以下文章