所以我在讀一本書,它使用此方法重載職能 -的Javascript重載函數
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);
}
}
}
我有這幾個問題。
- 爲什麼當傳入的函數被調用時fn.length仍然在範圍內?不應執行addMethod導致fn超出範圍?
- 爲什麼參數不是引用匿名函數的參數屬性而不是fn函數的參數屬性? (這應該是我想?)
請注意,只有當原始函數(如果有)具有不同數量的參數時,它纔會重載。很明顯,因爲JavaScript是無類型的,但值得一提,因爲一些其他(鍵入)語言允許重載相同的參數。結果是你不能'重載'一個不需要使用其所有參數的函數。 (x = x || 0; ...) – GameAlchemist