主要是受到《你不知道的JavaScript(上捲)》中,軟綁定softBind()方法啟發,當中應用了柯里化,這種方式確實剛開始不好理解,觀看了張鑫旭的博客後,才對柯里化的方式有了一點瞭解。 軟綁定代碼,如下: 軟綁定優化了硬綁定,使this指向更加靈活,可以使用隱式綁定或者顯式綁定修改this。 ...
var currying = function(fn){ var Args = [].slice.call(arguments, 1); //此時Args = ['aaa']; return function(/*get調用時傳入的參數*/){ //此時arguments = ['bbb','ccc','ddd','eee']; newArgs = ['aaa','bbb','ccc','ddd','eee']; var newArgs = Args.concat([].slice.call(arguments)); return fn.apply(null, newArgs); } }; var get = currying(function(){ //這裡的allArgs = newArgs; var allArgs = [].slice.call(arguments); console.log(allArgs.join(';')); }, 'aaa'); get('bbb','ccc','ddd','eee') //[aaa;bbb;ccc;ddd;eee]
主要是受到《你不知道的JavaScript(上捲)》中,軟綁定softBind()方法啟發,當中應用了柯里化,這種方式確實剛開始不好理解,觀看了張鑫旭的博客後,才對柯里化的方式有了一點瞭解。
軟綁定代碼,如下:
if( !Function.prototype.softBind ){ Function.prototype.softBind = function(obj){ var fn = this; var curried = [].slice.call(arguments, 1); var bound = function(){ return fn.apply( ( !this || this ===(window || global) ) ? obj : this, curried.concat.apply( curried , arguments ) ); }; bound.prototype = Object.create( fn.prototype ); return bound; }; }
軟綁定優化了硬綁定,使this指向更加靈活,可以使用隱式綁定或者顯式綁定修改this。