拜讀js忍者修煉一書 讀到關於js函數重載內容這個模塊app
主要是介紹經過js的訪問argument這個參數來實現js函數的重載函數
經過在函數內部進行判斷js argument參數的長度this
代碼以下所示spa
var ninja = { whatever: function(){ switch(arguments.length){ case 0: /* do something */ break; case 1: /* do something else */ case 2: /* do yet something else */ break; // and so on... } } }
可是這種實現方式不夠忍者,不夠簡潔code
做者給了咱們一種更加牛逼的實現方式,在調用的時候添加函數邏輯blog
var ninja = {} addMethod(ninja, ‘whatever’, function(){/* do something */}); addMethod(ninja, ‘whatever’, function(a){/* do something else */}); addMethod(ninja, ‘whatever’, function(a,b){/* yet something else */});
如今問題的關鍵就在於如何實現addMethod這個函數了開發
//Listing 4.15 A method overloading function function addMethod(object, name, fn){ var old = object[name]; object[name] = function(){ if (fn.length == arguments.length) return fn.apply(this, arguments) else if (typeof old == 'function') return old.apply(this, arguments); }
}
上述代碼是在針對添加方法的重載it
在文章的最後感謝做者根據本身的多年開發經驗寫出了這麼一本好書,爲個人進階之路提供了諸多指導,感謝這些大方不自私的人 慚愧io