2011-04-05 37 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

相关问题