柯里化-寫抽象函數

函數柯里化,反柯里化

判斷變量的類型

常用的判斷類型的方法有四種:

1.typeof 不能判斷對象類型

2.constructor 可以找到這個變量是通過誰構造出來的

3.instanceos 判斷誰是誰的實例 _proto_

4.Object.prototype.toString.call() 缺陷不能區分誰是誰的實例

寫個方法判斷類型

function isType(type, value) { 

    return Object.prototype.toString.call(value) === `[object ${type}]`

}

console.log(isType([], 'Array')

能不能把方法進行細化,=> isString isArray

function isType(type) { 

    return function (value) {

        Object.prototype.toString.call(value) === `[object ${type}]`

   }

}

let isArray = isType('Array');

isArray('hello');

通過一個柯里化函數,實現通用的柯里化方法

const currying = (fn, arr = []) => {

    let len =  fn.length; // 這裏獲取的是函數的參數的個數

    return function (..args) {

        arr = [...arr, ...args];

        if(arr.length < len) {

            return curring(fn, arr); // 遞歸不停的產生函數

       } else {

            return fn(...arr);

      }

    }

}

let isArray = curring(isType)('Array');

console.log(isArray([]));

 

例sum(a, b, c, d, e, f){ return a+b+c+d+e+f }

let r = curring(sum)(1,2)(3,4)(5)(6)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章