美文网首页
前端JS面试手写函数

前端JS面试手写函数

作者: 杉虎 | 来源:发表于2020-11-27 16:05 被阅读0次

    1.用一个柯里化函数实现累加

    // 柯里化函数
    function currying(fn,length) {
        var length = length || fn.length;
        return function(...arg) {
            if(arg.length >= length) {
                return fn(...arg);
            } else {
                return currying(fn.bind(null,...arg),length-arg.length);
            }
        }
    }
    function $add(a1,a2,a3,a4) {
        return a1 + a2 + a3 + a4;
    }
    var add = currying($add,4);
    console.log(add(1,2,3,4));
    console.log(add(1,2)(3,4));
    console.log(add(1)(2)(3,4));
    console.log(add(1)(2)(3)(4));
    

    2.实现一个bind函数

    //myBind函数
    Function.prototype.myBind = function (argThis,...arg) {
        const _Fn = this;
        return function() {
            const args = [...arg,...arguments];
            return _Fn.apply(argThis,args);
        }
    }
    
    var name = 'Nick'
    function sayName() {
        return this.name
    }
    var obj = {
        name: 'Lily'
    }
    console.log(sayName())
    var sayNamenew = sayName.myBind(obj);
    console.log(sayNamenew())
    

    3.实现一个new函数

    //myNew函数
    function Dog(name) {
        this.name = name;
        this.bar = function() {
            console.log(`my name is ${this.name}`)
        }
        // return this
    }
    
    function myNew(fn,...arg) {
        // let _Fn = new Object();
        // _Fn.__proto__ = fn.prototype;
        let _Fn = Object.create(fn.prototype);
        let result = fn.apply(_Fn,arg);
        return typeof result === 'object' ? result : _Fn;
    }
    
    var teddy = myNew(Dog,'Teddy');
    console.log(teddy.name)
    teddy.bar();
    

    相关文章

      网友评论

          本文标题:前端JS面试手写函数

          本文链接:https://www.haomeiwen.com/subject/ybbxwktx.html