2011-04-05 27 views

回答

0

你唯一的其他選擇是創建自己的工廠Function功能,因爲你已經排除了修改由標準Function工廠使用的機制。當然,這不太可能做到你想做的事情,因爲每個人都必須使用你的工廠。 :-)

修改Function.prototype不是必然邪惡。 Prototype已經做了多年,主要是爲了好的效果。

+0

@ T.JCrowder它是邪惡的! – Raynos 2011-04-05 16:34:52

+0

@Raynos::-)我同意修改Object.prototype是** Absolute Evil **。修改'Array.prototype'是相當*邪惡的,因爲人們在他們糟糕的'for..in'循環中搞砸了(並且告訴他們「但是你做錯了」並不一定是好的答案) 。但是'Function.prototype'? Enh ... ;-) – 2011-04-05 16:37:43

+0

@ T.JCrowder修改_any_原生原型是邪惡的。我在任意'對象'中使用'for'循環。只要它是一個「Object」,我不在乎Object是'Object'還是'Array'或'Function'或'Number'。因此,修改任何原生原型都會破壞結構良好的通用可擴展和功能樣式代碼。 – Raynos 2011-04-05 16:44:02

0
function Wrap() { 
    var f = new Function; 
    /* for (var k in Wrap.prototype) { 
     f[k] = Wrap.prototype[k]; 
    } 
    return f; */ 
    // return $.extend(f, Wrap.prototype); 
    return _.extend(f, Wrap.prototype); 
} 

Wrap.prototype.foo = 42; 

(Wrap()).foo === 42; // true 

創建一個新函數,然後使用Wrap.prototype中的屬性擴展該函數。

可以使用jQuery,下劃線或簡單的for循環。

+0

雖然是那些繼承的屬性?看起來他們正在複製到新功能。 Underscore.js extend()doc說:「將源對象中的所有屬性複製到目標對象。」 – 2011-04-05 16:50:55

+0

@SamuelDanielson繼承是不是?你把它們複製過來。這就是它的工作原理。 – Raynos 2011-04-05 17:33:33

+0

不,複製不是繼承。這是一個可憐的第二堂兄弟,在@Samuel設定的範圍內(不擴展'Function.prototype'),它可能是你要做的最好的事情,但它不是繼承。 – 2011-04-05 21:22:52

相關問題