cari

Rumah  >  Soal Jawab  >  teks badan

javascript - js Adakah terdapat cara yang elegan untuk memasukkan parameter daripada fungsi rampasan luaran?

let fn = (a, b, c) => {
  console.log(a, b, c)
}

fn1(0, 0, 0) // output: 0 0 0

Saya mahu parameter kedua fn sentiasa dinaikkan 2 setiap kali ia dipanggil

Itu

fn(0, 0, 0) // output: 0 2 0
fn(1, 1, 1) // output: 1 3 1

Pada masa ini saya hanya boleh mencari cara yang sangat jelek untuk menulis rampasan:

fn = (_ => {
  const innerFn = fn
  const newFn = (a, b, c) => {
    innerFn(a, b + 2, c)
  }
  Object.assign(newFn, innerFn)
  return newFn
})()

Adakah kaedah pembungkusan yang lebih baik?

黄舟黄舟2753 hari yang lalu425

membalas semua(3)saya akan balas

  • 淡淡烟草味

    淡淡烟草味2017-05-16 13:32:03

    Caranya betul, tapi saya selalu rasa tulisan awak agak janggal... Saya rasa lebih baik lebih direct...

    // 原函数
    function fn(a, b, c) {
      console.log(a, b, c)
    }
    // 加工函数
    const addTwo = (fn) =>
        (a, b, c) =>
            fn(a, b + 2, c);
            
    // 生成新函数
    const newFn = addTwo(fn);
    
    newFn(0, 0, 0);    //0 2 0

    balas
    0
  • 为情所困

    为情所困2017-05-16 13:32:03

    Saya mahu fn sentiasa menambah 2 pada parameter kedua setiap kali ia dipanggil

    Eh-huh. .

    Malah, ia tidak lebih daripada menambah 0, 2, 0 pada parameter masing-masing

    Maksudnya, satu lagi fungsi separa fnOffset dijana daripada fungsi fn 偏函数 fnOffset

    把 [0, 2, 0] 这三个参数 分别加到 fn(a, b, c) 上的 a b c 上

    更广义的说:

    [ .... ]n 个参数 分别加到 fn()arguments 的对应位置上

    function fn(a, b, c){
        console.log(a, b, c); 
    }
    
    function adder(arr, fn, _this){
        _this = _this || window; 
        var toAdd = arr.slice(0, fn.length); 
        
        return function(){
            var argu = Array.prototype.slice.call(arguments); 
            
            fn.apply(_this, toAdd.map((item, idx) => {
                return argu[idx] + item; 
            })); 
        }
    }
    
    var fnOffset = adder([0, 2, 0], fn); 
    
    fnOffset(0, 0, 0); 
    fnOffset(2, 1, 0); 
    

    fn020

    🎜Tambah tiga parameter [0, 2, 0] pada a b c pada fn(a, b, c) masing-masing 🎜🎜 🎜Dalam erti kata yang lebih luas: 🎜 🎜Tambahkan parameter n [ .... ] pada argumen yang sepadan dengan fn() Lokasi 🎜 rrreee 🎜🎜 🎜🎜 🎜Menggunakan fn020 sebagai nama ubah seharusnya lebih elegan = =🎜

    balas
    0
  • ringa_lee

    ringa_lee2017-05-16 13:32:03

    Apa yang anda huraikan adalah sedikit seperti Proksi ES6, tetapi ini tidak boleh diisi poli dan mungkin tidak sesuai untuk digunakan pada bahagian hadapan.

    balas
    0
  • Batalbalas