如何在不修改全局Function.prototype的情况下创建函数的继承属性?

时间:2011-04-05 16:22:49

标签: javascript

这样的东西适用于全局Function.prototype。

Function.prototype.aaa = 1
(function () {}).aaa // => 1

但是有没有办法在不改变Function.prototype的情况下放置函数的继承属性?

function MyFunction () { return function () {} }
MyFunction.prototype.bbb = 2
// Can I have (new MyFunction).bbb ?

2 个答案:

答案 0 :(得分:0)

您唯一的另一个选择是创建自己的Function工厂函数,因为您已经排除了修改标准Function工厂使用的机制。当然,这不太可能按照你的意愿去做,因为每个人都必须使用你的工厂。 : - )

修改Function.prototype不是必然邪恶。 Prototype多年来一直在做这件事,效果很好。

答案 1 :(得分: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循环。