2015-10-21 65 views

回答

2

也許是這樣的。這是有點棘手,因爲JavaScript沒有像Python這樣的命名參數,但是這個函數非常接近。

function partial() { 
 
    var args = Array.prototype.slice.call(arguments); 
 
    var fn = args.shift(); 
 
    return function() { 
 
    var nextArgs = Array.prototype.slice.call(arguments); 
 
    // replace null values with new arguments 
 
    args.forEach(function(val, i) { 
 
     if (val === null && nextArgs.length) { 
 
     args[i] = nextArgs.shift(); 
 
     } 
 
    }); 
 
    // if we have more supplied arguments than null values 
 
    // then append to argument list 
 
    if (nextArgs.length) { 
 
     nextArgs.forEach(function(val) { 
 
     args.push(val); 
 
     }); 
 
    } 
 
    return fn.apply(fn, args); 
 
    } 
 
} 
 

 
// set null where you want to supply your own arguments 
 
var hex2int = partial(parseInt, null, 16); 
 
document.write('<pre>'); 
 
document.write('hex2int("ff") = ' + hex2int("ff") + '\n'); 
 
document.write('parseInt("ff", 16) = ' + parseInt("ff", 16)); 
 
document.write('</pre>');

+0

順便說一句我還發現https://github.com/azer/functools其具有[實施](https://github.com/azer/functools/blob/4db1708/ LIB/functools.js#L261-L268)。 – Zitrax