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系列的主要内容,如果未能解决你的问题,请参考以下文章

Vue2.0做的项目在IE下面打开一片空白?

isIntegar polyfill修复IE11

isIntegar polyfill 修复 IE11

Vue 做的项目在IE下面打开一片空白解决方法

javascript Polyfills

javascript startswith()polyfill